JDBC基本概念
Java DataBase connectivity java数据库连接、即java语言操作数据库
本质:官方定义的一套操作所有关系型数据库的规则,即接口,各个数据库厂商去实现这个接口,提供数据库驱动jar包,我们可以使用这套借口编程,真正执行的代码是驱动jar包中的实现类
快速入门步骤:
1、导入驱动jar包,mysql-connector-java5.1.37-bin.jar
复制mysql-connector-java5.1.37-bin.jar到项目libs目录下
右键-->Add As Library
2、注册驱动
3、获取数据库连接对象 Connection
4、定义SQL
5、获取执行sql语句的对象 Statement
6、执行sql,接受返回结果
7、处理结果
8、释放资源
//代码实现
//2、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3、获取数据库连接对象 Connection
Connection conn = DriverManager.getConnection("jdbc:mysql://locdlhost:3306/dab3", "root", "545646");
//4、定义SQL
String sql = "select account set balance=500 where id = 1";
//5、获取执行sql语句的对象 Statement
Statement statement = conn.createStatement();
//6、执行sql,接受返回结果
int aount = statement.executeUpdate(sql);
//7、处理结果
System.out.println(aount);
//8、释放资源
statement.close();
conn.close();
详解各个对象
DriverManager:驱动管理对象;
1、注册驱动,告诉程序该使用哪一个数据库驱动jar mysql5之后省略此操作
2、获取数据库连接 getConnection();
Connection:数据库连接对象
1、获取执行sql 的对象
2、管理事务
开启事务:setAutoCommit(boolean autocommit);
提交事务:commit();
回滚事务:rollback();
Statement:执行sql对象
执行sql
1. boolean execute(string sql) :可以执行任意的sql 了解
2. int executeupdate(string sql) :执行DML (insert, update, delete)语句、DDL(create, alter.drop)语句
*返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功返回值>0的则执行成功,反之,则失败。
3. ResultSet executeQuery(string sql) :执行DQL (select)语句
ResultSet:结果集对象
next():游杯向 移功一行
getxxx(参数):获取数据
Xxx:代表数据类型 如: int getInt() , string getstring()*
参数
1. int:代表列的编号,从1开始 如: getstring(1)
2. string:代表列名称。如: getDouble("balance")
注意:使用步骤:1.游标向下移动一行;2.判断是否有数据;3,获取数据
//循环判断游标是否是最后一行末尾。
while(rs.next()){
//获取数据
//6.2获取数据
int id = rs.getInt (1);
string name =rs.getstring("name");
double balance = rs.getDouble(3);
System.out.println(id +"--"+ name+ ".-" + balance);
}
prepareStatement:执行sql对象
1. SQL注入问题:在拼接sq1时,有一些sq1的特殊关键字参与字符串的拼接。会造成安全性问题
1,输入用户随便,输入密码: a' or 'a' ='a
2.sql : select * from user where username = 'fhdsjkf' and password ='a' or 'a' = 'a'
2.解决sql注入问题:使用Preparedstatement对象来解决
3.预编译的SQL :参数使用?作为占位符
4.步骤:
1,导入驱动jar包mysql-connector-java-5.1.37-bin.jar
2.注册驱动
3,获取数据库连接对象Connection
4.定义sql注意: sql的参数使用?作为占位符。如: select * from user where username = ? and password =?;
5,获取执行sq1语句的对象Preparedstatement connection.preparestatement(string sql)
6.给?赋值:*方法: setxxx(参数1,参数2)*参数1 : ?的位置编号从1开始参数2 :?的值
7,执行sql,接受返回结果,不需要传递sql语句
8.处理结果
9.释放资源