注:这个笔记是大一写的 学到这里的时候还没学Maven 因而在本例子里采用的是添加jar包的方式
IDE用的是Idea
首先 项目里创建lib包 放入下载的JDBC的jar包 在idea里右键此JDBC 点击Add as Library选项
步骤:
1、注册驱动 目的:告诉java虚拟机使用哪个数据库的驱动
2、获得连接
3、获得语句执行平台
4、执行sql语句
5、处理结果
6、释放资源
1、注册驱动 告诉jvm使用哪个数据库的驱动:mysql oracle db2 sqlserver…
注册驱动采用反射技术 将驱动加载到内存
// Driver在哪里?填入路径
Class.forName("com.mysql.cj.JDBC.Driver");
2、获得连接 获得数据库的连接
getConnection(String url, String user, String password)
试图建立到给定数据库 URL 的连接
url:数据库的链接地址,格式:JDBC:mysql://链接主机ip地址(XXX.XX.XX.XX / localhost):mysql端口号3306/数据库名
user:数据库用户名(root)
password:数据库密码(123456)
String url="JDBC:mysql://localhost:3306/mytest?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false";//?问号表明后面要带参数
String user="root";
String password="123456";
Connection connection= DriverManager.getConnection(url,user,password);
3、获得语句执行平台
通过数据库链接对象connection获取sql语句的执行者对象
Statement createStatement()
创建一个 Statement 对象来将 SQL 语句发送到数据库
Statement statement=connection.createStatement();
4、执行sql语句
String sql="INSERT INTO student(NAME,age) VALUES ('学生M',16)";
5、处理结果
int executeUpdate(String sql)
执行给定SQL语句 该语句可能为INSERT、UPDATE 或 DELETE 语句 或者不返回任何内容的SQL语句
int count=statement.executeUpdate(sql);//count变量表明有几条语句改变
System.out.println(count);
6、释放资源
statement.close();
connection.close();
另一个案例:查询功能
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.JDBC.Driver");
String url="JDBC:mysql://localhost/mytest?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false";
String user="root";
String password="123456";
Connection con= DriverManager.getConnection(url,user,password);
Statement sta=con.createStatement();
String sql="select * from student";
// ResultSet executeQuery(String sql) 执行给定的SQL语句,该语句返回单个ResultSet对象
ResultSet rs=sta.executeQuery(sql);
// boolean next() 将光标从当前位置向前移一行
while (rs.next())
{
//取值
System.out.println(rs.getString("id")+" "+rs.getString("name")+" "+rs.getInt("age"));
}
sta.close();
con.close();
rs.close();
}
补充:略谈sql注入及解决方法
何为sql注入?
在未掌握表中的任何数据的情况下通过WHERE关键字查询表中全部数据
例:
SELECT * FROM student WHERE NAME='学生S' AND age=29 OR 1=1;
在这里 【OR 1=1】可以调取所有的表
如何解决mysql注入问题?
Statement改为用PreparedStatement
另外具有高效的特点
注意:sql语句中的参数全部用[?]问号占位符【很重要】
Class.forName("com.mysql.cj.JDBC.Driver");
String url="JDBC:mysql://localhost/mytest?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false";
String user="root";
String password="123456";
Connection con= DriverManager.getConnection(url,user,password);
String sql="select * from student where name=? and age=?";
PreparedStatement sta=con.prepareStatement(sql);
sta.setString(1,"学生A"); // 第一个问号
sta.setString(2,"16"); // 第二个问号
ResultSet rs=sta.executeQuery();
while (rs.next())
{
System.out.println(rs.getString("id")+" "+rs.getString("name")+" "+rs.getInt("age"));
}
sta.close();
con.close();
rs.close();
JDBC是最基础的数据库连接
开发中通常不会使用JDBC 但会使用以JDBC为基础的框架 例如Mybatis