Java数据库的连接JDBC
1、JDBC
开发步骤
(1)注册驱动.
告知JVM使用的是哪一个数据库的驱动
(2)获得连接.
使用JDBC中的类,完成对MySQL数据库的连接
(3)获得语句执行平台
通过连接对象获取对SQL语句的执行者对象
(4)执行sql语句
使用执行者对象,向数据库执行SQL语句
获取到数据库的执行后的结果
(5)处理结果
(6)释放资源.(先开的后关)
调用一堆close()方法
package com.oracle.demo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class demo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.注册驱动.
//告知JVM使用的是哪一个数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获得连接.
//使用JDBC中的类,完成对MySQL数据库的连接
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/ceshi?characterEncoding=utf-8","root","123");
//3.获得语句执行平台
//通过连接对象获取对SQL语句的执行者对象
Statement sta = conn.createStatement();
//4.执行sql语句
//使用执行者对象,向数据库执行SQL语句
//获取到数据库的执行后的结果
String sql = "insert into sort(sname) values ('护手霜')";
int row = sta.executeUpdate(sql);
System.out.println(row);
//5.处理结果
//6.释放资源(先开的后关)
//调用一堆close()方法
sta.close();
conn.close();
}
}
再举一个例子:
package com.oracle.difficult;
//插入数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class demo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1、注册驱动、告知JVM使用的是哪一个数据库的驱动
//异常ClassNotFoundException
Class.forName("com.mysql.jdbc.Driver");
//2、获得连接
//导包
String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk";//这里ceshi是数据库
String root = "root";
String password = "123";
//异常SQLException
//DriverManager:管理一组 JDBC 驱动程序的基本服务
//Connection:与特定数据库的连接
Connection con = DriverManager.getConnection(url,root,password);
//3.获得语句执行平台
//创建一个 Statement 对象来将 SQL 语句发送到数据库
Statement sta = con.createStatement();
//4、执行sql语句
//使用执行者对象 /Statement 对象/ ,向数据库执行SQL语句
//写SQL语句;
String sql = "insert into ceshi1(id,sname) values (10,'剑魂')";
//int executeUpdate(String sql)
//执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,
//或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)如:CREATE TABLE和DROP TABLE等。
int row = sta.executeUpdate(sql);
System.out.println(row);
//5、处理结果
//执行insert、update、delete无需处理
//6、释放资源(先开的后关,后开的先关)
//调用一堆close()方法
sta.close();
con.close();
}
}
需要处理结果集:
package com.oracle.difficult;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class demo03 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2、获得连接
String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk";
String root = "root";
String password = "123";
Connection con = DriverManager.getConnection(url, root, password);
//3、获得语句执行平台
Statement sta = con.createStatement();
//4、执行sql语句
String sql = "select * from ceshi1 where sname = '狂战士'";
//需要导包 import java.sql.ResultSet;
ResultSet rs = sta.executeQuery(sql);
//5、处理结果
while(rs.next()){
System.out.println(rs.getString("id")+".."+rs.getString("sname"));
}
//6、释放资源
rs.close();
sta.close();
con.close();
}
}
2、数据库的连接
(1)select 查询操作:
执行语句:ResultSet executeQuery(sql);
处理结果集:rs.next();rs.getXxx();
释放资源:ResultSet.close();
(2)预处理对象 PreparedStatement:解决SQL注入问题
sql语句:? 占位符;
获得执行对象:prepareStatement(sql);
执行语句:setXxx(int, Obj);executeQuery();
释放资源:PreparedStatement.close();
举个例子:
package com.oracle.difficult;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class demo04 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2、获得连接
String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk";
String root = "root";
String password = "123";
Connection con = DriverManager.getConnection(url, root, password);
//3、获得语句执行平台
Statement sta = con.createStatement();
//4、执行sql语句
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String user = sc.next();
System.out.println("请输入密码:");
String pass = sc.next();
String sql = "select count(*) from user where uname = '"+user+"' "+"and pwd = '"+pass+"'";
//需要导包 import java.sql.ResultSet;
ResultSet rs = sta.executeQuery(sql);
/*//3、获得语句执行平台(预处理对象,解决SQL注入问题)
String sql = "select count(*) from ceshi1 where id = ? and sname = ?";
PreparedStatement past = con.prepareStatement(sql);
//4、执行SQL语句
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
int user = sc.nextInt();
System.out.println("请输入密码:");
String pass = sc.next();
past.setInt(1, user);
past.setString(2, pass);
ResultSet rs = past.executeQuery();*/
//5、处理结果集
int count = 0;
while(rs.next()){
count = rs.getInt(1);
}
if(count > 0){
System.out.println("登录成功!!");
}else{
System.out.println("登录失败");
}
//6、释放资源
rs.close();
sta.close();
con.close();
}
}
SQL语句注入问题:

(3)JDBCUtils工具类:
将注册驱动、获得连接和释放资源(方法重载)封装起来;
package com.oracle.tools;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCUtils {
public static Connection get() {
//1、注册驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//2、获得连接
String url = "jdbc:mysql://localhost:3306/ceshi?characterEncoding=gbk";
String root = "root";
String pwd = "123";
Connection conn = null;
try {
conn = DriverManager.getConnection(url,root,pwd);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn,PreparedStatement pst){
if(pst != null){
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Connection conn,PreparedStatement pst,ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pst != null){
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

浙公网安备 33010602011771号