Java连接数据库的入门操作使用
什么是JDBC?JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API。我们可以通过JDBC来连接数据库,从而达到对数据库的获取数据等操作的目的。下面以数据库MySQL为例子说明。
一、JDBC主要3个类
Connection类、Statement类、ResultSet类
Connection类:主要用于连接数据库。
Statement类:用Connection类连接好数据库后,就可以用Statement类执行sql语句。
ResultSet类:Statement类执行sql语句的结果放到这个类里。
Connection类相当于一个桥,待桥建好后,Statement类走过桥到达目的地执行工作,工作完成后把结果放到ResultSet这个背包里带回来。整个工作就完成了。
二、环境准备
具有Java开发环境jkd,从maven仓库中下载mysql-connector-java包并导入到项目中去。电脑的MySQL数据库为多少版本就下载对应版本的mysql包。
下载地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java
三、coding
1、加载驱动器,用于连接数据库
Class.forName("com.mysql.jdbc.Driver");
2、获取Connection
String url="jdbc:mysql://localhost:3306/school";
String name ="root";
String psd = "root";
Connection connection = DriverManager.getConnection(url,name,psd);
3、获取Statement
Statement statement = connection.createStatement();
4、执行sql,结果放入ResultSet中
ResultSet resultSet = statement.executeQuery("sql语句");
5、获取结果(如下例子为获取查询结果)
ResultSet resultSet = statement.executeQuery("select * from student");
while (resultSet.next()){
System.out.print("id:"+resultSet.getObject("id"));
System.out.print(" name:"+resultSet.getObject("name"));
System.out.println(" age:"+resultSet.getObject("age"));
}
6、关闭连接
resultSet.close();
statement.close();
connection.close();
四、简单例子完整代码
public class No1_JDBC {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/school";
String name ="root";
String psd = "root";
Connection connection = DriverManager.getConnection(url,name,psd);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from student");
while (resultSet.next()){
System.out.print("id:"+resultSet.getObject("id"));
System.out.print(" name:"+resultSet.getObject("name"));
System.out.println(" age:"+resultSet.getObject("age"));
}
resultSet.close();
statement.close();
connection.close();
}
}
五、防止SQL注入
防止SQL注入最好使用PreparedStatement类代替Statement类
如:
/**************************预编译sql语句*****************/
String SqlCheck = "insert into student(`name`,age,sex) values(?,?,?)";
/***********************获取PreparedStatemen************/
PreparedStatement stCheck = connection.prepareStatement(SqlCheck);
/**************************获取设置参数******************/
stCheck.setString(1,"小肥");
stCheck.setInt(2,21);
stCheck.setString(3,"男");
/**************************执行*************************/
stCheck.executeUpdate();
六、事务
public class No5_affair {
public static void main(String[] args) throws SQLException {
Connection connection = Utils.getConnection();
try {
connection.setAutoCommit(false);
Statement statement = connection.createStatement();
statement.executeUpdate("update student set money=money-1 where `name`='小肥'");
int x=1/0;
statement.executeUpdate("update student set money=money+1 where `name`='靓仔'");
connection.commit();
}catch (Exception e){
}
}
}