JDBC连接数据库
一、JDBC
概念:JDBC(Java DataBase Connectivity) 是一种Java数据库连接计数,能实现Java程序对各种数据库的访问。有一组使用Java语言编写的类和接口组成,称为JDBC API
作用:
1)建立与数据库之间的访问连接
2)将编写好的SQL语句发送到数据库执行
3)对数据库返回的结果进行处理
二、使用JDBC访问数据库
1、几个重要的JDBC API
1)DriverManager类:负责依据数据库的不同,管理JDBC驱动
2)Connection(连接)接口:负责连接数据库并担任传送数据的任务
3)Statement接口:有Connection产生,负责执行SQL语句
4)ResultSet 接口:负责保存Statement 执行后所产生的执行结果
2、访问数据库的步骤:
1.加载驱动Class.forName();
2.创建连接 Connection conn = DriverManager.getConnection(url,user,pwd);
3.创建Statement执行SQL语句 Statement stmt = conn.createStatement();
4.返回ResultSet查询结果 ResultSet rs = stmt.execute(sql);
5.释放资源 .close();
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//使用DriverManager类获取数据库连接
//配置url地址,jdbc:mysql://主机:端口/数据库
String url = "jdbc:mysql://localhost:3306/kgcnews";
Connection connection = DriverManager.getConnection(url,"root","root");
//执行SQL语句
Statement stmt = connection.createStatement();
String sql = "select * from news_detail";
ResultSet rs = stmt.executeQuery(sql); //结果集保存到ResultSet
while(rs.next){ //获取查询的各个字段
String id = rs.getInt(1); //数字表示按顺序第几个字段
String title = rs.getString("title");//具体某列的值
System.out.println("id:"+id+",\t title:"+title)
}
//使用结束关闭资源,注意要判空
rs.close();
stmt.close();
connection.close();
读取配置文件的方式
改配置文件要比改Java代码方便
创建jdbc.peoperties
配置文件,将数据库的信息写入配置文件
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/kgcnews
jdbc.user = root
jdbc.password = root
加载配置文件
public static void loadProperties() {
//读取文件内容
InputStream is = JDBCUtil.class.getResourceAsStream("jdbc.properties");
//创建peoperties对象
Properties prop = new Properties();
try {
prop.load(is); //从字节输入流中读取键值对
//根据键获取对应的值
String driver = prop.getProperty("jdbc.driver");
String url = prop.getProperty("jdbc.url");
String user = prop.getProperty("jdbc.user");
String password = prop.getProperty("jdbc.password");
//后面为具体的用JDBC连接数据库步骤
} catch (IOException e) {
e.printStackTrace();
}
}
3、操作数据库
对数据库进行增删改查操作
Statement 与prepareStatement
Staement 由方法 createStatement()
创建,该对象用于发送简单的SQL语句
prepareStatement 由方法 prepareStatement()
创建,该对象用于发送带有一个或者多个输入参数的SQL语句
SQL语句使用 '?'作为占位符
用setXxx()方法设置数据
例:
Connection conn=null;
Statement stmt = null;
ResultSet rs = null;
Statement进行插入操作
public void insert() {
try {
stmt =conn.createStatement();
String sql = "insert into news_detail values (3,1,'测试','测试结果数据放在这里',null,null,'admin',now(),null );";
//执行插入语句
stmt.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
Statement进行删除操作
public void delete(int id ){
try {
stmt =conn.createStatement();
//删除的sql语句
String sql = "delete from news_detail where id="+id;
//执行删除语句
stmt.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
Statement进行更新操作
public void update() {
try {
stmt = conn.createStatement();
String sql = "update news_detail set title ='测试新参数' where id=3";
stmt.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
Statement进行查询操作
public void queryAll(String str){
//要执行的动作
try {
//创建statement对象
stmt = conn.createStatement();
String sql = "select * from news_detail"+str;
//执行查询语句,结果集保存到ResultSet中
rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt(1);
String title = rs.getString("title");
System.out.println("id:"+id+",title:"+title);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
prepareStatement进行操作
和Statement可以多有 ’ ?'和setXxx()赋值的区别,后续操作与Statement操作类似,后面只贴了一个insert的操作
PrepareStatement psmt =null;
public void insertUser(int id,String name,String pwd,String email,int userType) {
try {
String sql = "insert into news_user values(?,?,?,?,?)";
PrepareStatement pstm = conn.prepareStatement(sql);
//用set方式给插入的值赋值,1-4对应上面的sql语句
pstm.setInt(1, id);
pstm.setString(2, name);
pstm.setString(3, pwd);
pstm.setString(4, email);
pstm.setInt(5, userType);
//执行SQL语句
pstm.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
4、execute、executeQuery、executeUpdate区别
-
execute:
执行SQL语句,返回的是boolean值,表示查询的结果集(ResultSet接受)是否返回了
-
executeQuery:
只能执行查询的SQL语句,返回的是一个ResultSet结果集
-
executeUpdate:
执行的是insert,update,delete的SQL语句,返回的是一个int型整数值,表示受到影响的行数;
5、statment 和preparestatment区别
错误以及不足之处请指正,谢谢!