先给出总的代码示例,本文采取的数据库为MySQL,但是提示一下这个代码不能直接运行,需要先配置其相对应的环境,环境配置接下来会解释:
package mysql;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class JDBC_test {
public static void main(String[] args) throws Exception{
//1.注册驱动,可以省略
Class.forName("com.mysql.jdbc.Driver");
//获取连接,采取Druid
//2.加载配置文件
Properties prop = new Properties();
//采取加载文件的流的方式
prop.load(new FileInputStream("JDBC_demo/src/druid.properties"));
//获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//利用连接池进行连接
Connection conn = dataSource.getConnection();
//定义sql语句
int id = 1;
String name = "zhang";
String sql1 = "select * from account where name = ? and id = ?";
//获取sql语句,采取预编译方式,加快速度,防止sql注入
PreparedStatement pstmt = conn.prepareStatement(sql1);
//对sql中的?进行设置,第一个参数为?位置,第二个参数为对应值
pstmt.setInt(2,id);
pstmt.setString(1,name);
ResultSet res = pstmt.executeQuery();
//使用一个列表存储结果
List<User> res_set = new ArrayList<>();
//返回多列数据,可以采取next()方法不断向下遍历结果,但是遍历完成后next()会处在列表最后
//可以使用try——catch来完成数据库的事务
try {
conn.setAutoCommit(false);//将事务设定为手动提交
while(res.next()){
User user = new User();
//查询结果一行行存储,getxxx方法可以给列号也可以给列名
user.setId(res.getInt(1));
user.setName(res.getString(2));
user.setMoney(res.getDouble(3));
res_set.add(user);
System.out.println(1);
}
conn.commit();
} catch (Exception throwables) {
throwables.printStackTrace();
}
for(User user:res_set){
System.out.println("id="+user.getId()+" name="+user.getName());
}
//关闭资源
res.close();
pstmt.close();
conn.close();
}
}
java并不能直接对数据库进行操作,但是Java存在着一套标准接口可以近乎对所有数据库进行操作,这套接口就是JDBC。想要使用这套接口需要下载对应的jar包。
JDBC分为七个部分,第一部分是注册驱动,在这个部分需要对数据库进行指明Class.forName("com.mysql.jdbc.Driver");
但是这部分可以省略。
相关驱动配置已经存在于MySQL的jar包之中。
接下来是获取连接。
String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useServerPrepStmts=true";
String userName = "";//具体的用户名
String password = "";//密码
先指明ip及端口,上述ip及端口表示数据库保存在本地,?后为要使用的一些具体的方法,比如 useSSL=false指的是不使用ssl连接,useServerPrepStmts=true指的是允许使用预编译功能。
Connection conn = DriverManager.getConnection(url,userName,password);
获取连接之后要进行的就是定义sql语句了,SQL语句可以分为两类,SELECT和除SELECT之外的语句
String sql1 = "update account set money = 2000 where name = '张三'";
String sql2 = "select * from account";
接下来是获取执行sql语句的对对象
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql1);//受影响的行数
ResultSet res = stmt.executeQuery(sql2);//res保存返回的部分表
//6. 处理结果
System.out.println(count);
//7. 释放资源
stmt.close();
conn.close();
然后是让该对象执行sql语句,需要注意的是在执行增删改时采取的方法是executeUpdate(sql1),执行查询时采取的方法是executeQuery(sql2),executeUpdate(sql1)返回的是一个整数量,表示的是受影响的行数,而executeQuery(sql2)返回的是一个ResultSet类的对象,其实就是sql查询功能完成后返回的二维表。最后就是处理结果和释放资源了,处理结果会因为需求的不同而不同。