11 第十一章 JDBC
JDBC 搭建
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCDemo {
public JDBCDemo() {
}
//1、导入mysql数据库驱动包 lib ok
//2、加载数据库驱动
//3、建立与数据库的连接 ?后面是参数 时区参数是必须的 serverTimezone=UTC
//4、获得statement,用于向数据库发送sql语句(静态)。
//5、接受查询的结果
//6、关闭与数据库的连接通道
public static void main(String[] args){
//1、导入mysql数据库驱动包 lib ok
//2、加载数据库驱动
//方法一: 利用反射机制加载Driver类
try {
Class.forName("com.mysql.cj.jdbc.Driver"); //利用反射机制加载Driver类
System.out.println("加载驱动类成功");
//方法二:利用java的API java.sql包中的DriverManager 注册登记驱动
/* try {
DriverManager.registerDriver(new Driver());
} catch (SQLException throwables) {
throwables.printStackTrace();
}*/
//3、建立与数据库的连接 ?后面是参数 时区参数是必须的 serverTimezone=UTC
String url = "jdbc:mysql://127.0.0.1:3306/my_db?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";
// 获得连接
Connection connect = DriverManager.getConnection(url, "root", "227224");
System.out.println("数据库连接成功");
//4、获得statement,用于向数据库发送sql语句。
// 通过连接获取Statement对象
Statement statement = connect.createStatement();
String name = "王liu";
String sex = "男";
String mobile = "13279370686";
String sql = "create table test(name varchar (64) , mobile varchar (11))";
System.out.println(statement.execute(sql));
//关闭
connect.close();
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
11.1 Statement
‘“+字符值+”’
双单引号 双双引号 双加号
public class JDBCDemo {
public JDBCDemo() { }
public static void main(String[] args) {
//与 my_db 建立连接
Connection conn = JDBCUUtil.getConnection("my_db");
try {
Statement statement = conn.createStatement();
String name = "wangwu";
//execute 适合执行DDL语句
//boolean res = statement.execute("insert into test(name,mobile)" + "values('" + name + "','" + "13279370686" + "')");
//System.out.println(res);
//executeUpdate 适合插入,更新,删除操作。
/*int res = statement.executeUpdate("insert into test(name ,mobile)" + "values ('" + "mary" + "','" + "13277777777" + "')");*/
/*int res = statement.executeUpdate("update test set name = '"+"Tom"+"' where mobile = '"+"13277777777"+"'");*/
int res = statement.executeUpdate("delete from test where name = '"+"aaa"+"'");
System.out.println(res);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
11.2 PrepareStatement
//sql
ps.setDate(3,new Date(new java.util.Date().getTime()));
//或
ps.setObject(3,new Date()); // util 这种更好用
public class PrepareStatementDemo {
public PrepareStatementDemo() {
}
public static void main(String[] args) {
Connection conn = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
//DriverManager.registerDriver(new Driver());
String url = "jdbc:mysql://127.0.0.1:3306/my_db?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
conn = DriverManager.getConnection(url,"root","227224");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
//Connection conn = JDBCUUtil.getConnection("my_db");
try {
//SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
//发送一次,可以执行多次
//用问号当占位符 , 提高了安全性 防止sql注入
String sql = "insert into test(name,mobile)"+"values(?,?)";
//把sql语句存储在PrepareStatement对象中,然后调用该对象中的execute()方法执行
PreparedStatement ps = conn.prepareStatement(sql);
ps.setNString(1,"mmmm"); //下标从1开始
ps.setNString(2,"13299999999"); //下标从1开始
/*ps.setDate(3,new Date(new java.util.Date().getTime()));*/
int res = ps.executeUpdate();//sql语句发送到数据库
System.out.println(res);
ps.close();
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
Statement 和 PrepareStatement 的区别
- PrepareStatement安全性更高(sql注入,恶意攻击,or 1=1);
- PrepareStatement的预处理(预编译)会使效率更高;
- PrepareStatement可读性好,便于维护。
11.3 ResultSet 结果集
public class ResultSetDemo {
public ResultSetDemo() { }
public static void main(String[] args) {
Connection conn = JDBCUUtil.getConnection("my_db");
try {
String sql = "select * from test where name = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1,"Tom"); //下标从1开始
ResultSet res = ps.executeQuery();
while (res.next()){
String string = res.getString("mobile");
String string1 = res.getString("name");
System.out.println(string);
System.out.println(string1);
}
res.close(); //关掉结果集
ps.close();
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
也可以使用model类来存储查询出来的数据
版权声明:本文为qq_37079157原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。