网站项目宣传片,纯静态企业网站模板免费下载,微网站与微信网站,重庆有哪些网络公司JDBC全称Java database connectivity#xff0c;是Java和数据库连接的一个桥梁#xff0c;是一种使用Java操作数据库的规范。 JDBC编程步骤 一、JDBC准备工作二、初始化资源类三、执行sql语句类四、结果集类五、实现JDBC操作数据库 一、JDBC准备工作
1、因为访问数据库需要…JDBC全称Java database connectivity是Java和数据库连接的一个桥梁是一种使用Java操作数据库的规范。 JDBC编程步骤 一、JDBC准备工作二、初始化资源类三、执行sql语句类四、结果集类五、实现JDBC操作数据库 一、JDBC准备工作
1、因为访问数据库需要用到专门的第三方工具类的jar包所以我们在使用时需要引入外部jar包以IDEA编辑器和mysql为例这里我们需要使用Maven工程新建Maven工程在maven官网(https://mvnrepository.com/)搜索mysql选择 MySQL Connector/J选择下载量最多的5.1.38版本复制代码到pom.xml文件29行标签dependency里就会把相应的jar包导入到相应工程内了。 !-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.38/version/dependency2、定义数据库常量共4个点 1、数据库驱动:drivercom.mysql.jdbc.Driver 2、连接数据库的urlurljdbc:mysql://192.168.221.***:3306/kb10mysqltestdb?useUnicodetruecharacterEncodingutf8useSSLtrue 3、数据库登录名username****** 4、数据库登陆密码password****** 这里面数据库常量一般建议放在resources过的配置文件里把数据库常量以键值对的形式写进去方便后续维护
二、初始化资源类
3、新建一个BaseConfig类写一个初始化各个配置项的方法然后用构造器调取该方法作为访问该类的初始化参数因为涉及到登陆密码等该类的访问权限可以设置的低一些尽量不用public。 4、初始化各个配置的方法中要用到Tread.currentTread().getContextClassLoader().gerResource(“file_name”).getPath()方法获取到文件路径然后使用专门读取配置文件的类Properties(new一个对象)下面的load方法读取这个这个路径下的方法接下来使用properties类下的getProperty方法依次读取“url”“driver”“username”“password”最后把得到的参数传给当前对象。 5、创建一个注册驱动的getCon()连接方法把初始化进来的参数传到DriverManager.getConnection方法里 6、创建一个关闭资源释放资源的close()方法 代码如下
package cn.kb10.jdbc2;import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;class BaseConfig {//想隐藏的话就写内部类private class Config{String driver;String url;String username;String password;public Config(String driver, String url, String username, String password) {this.driver driver;this.url url;this.username username;this.password password;}}private Config config;//构造方法也不想被人看到用代码块{try {init();//装载驱动Class.forName(config.driver);} catch (Exception e) {System.err.println(e.getMessage());}}//初始化读取配置信息private void init() throws Exception {String path Thread.currentThread().getContextClassLoader().getResource(datasource.properties).getPath();Properties pro new Properties();pro.load(new FileReader(path));String url pro.getProperty(url);if (nullurl){throw new Exception(缺少url配置项异常);}String driver pro.getProperty(driver,com.mysql.jdbc.Driver);String username pro.getProperty(username,root);String password pro.getProperty(password,root);this.config new Config(driver,url,username,password);}protected Connection getCon() throws SQLException {return DriverManager.getConnection(config.url,config.username,config.password);}protected void close(AutoCloseable...acs){for (AutoCloseable ac : acs) {if (null!ac){try {ac.close();} catch (Exception e) {e.printStackTrace();}}}}
}三、执行sql语句类
7、新建一个继承于BaseConfig的子类这个子类就3个方法一个是预编译的方法(这里可以理解为写好的、只缺一个回车键、待执行的sql语句)一个是增删改的方法一个是查询的方法。 8、首先先写一下预编译的方法这里用到了PrepareStatement接口既然是预编译在使用时就要传入相应的参数传入哪些参数呢第一个是之前之前要注册连接上数据库吧也就是getCon方法执行后的结果连接上之后要执行语句吧第二个参数就是sql语句第三个参数是是一个通配符数组就是在sql语句执行时设置where子句的条件比如说查询学号为XX的成绩加上这个参数后可以通过直接控制这个通配符数组来更新条件当然也可以不要直接在sql语句里修改就是麻烦了些不够清晰也没啥问题。多说一句这个参数可以是整数也可以是字符串的所以在参数时设置为Object类型的通过setObject方法自动识别为对应的数据类型在使用setObject时需要注意下遍历数组元素时mysql是从1开始的因此索引是从1开是也就是i1。输入这几个参数后直接返回即可。 9、先写增删改方法。增删改的返回值一般是affected n rows因此我们返回int类型的值。这里我们的参数是sql语句和控制where子句范围的动态数组。首先我们定义一个连接器和预编译器初始化为null然后分别执行对应的方法注册驱动和预编译。到这里基本就结束了直接返回预编译后更新表格的条数。最后调用close方法倒序依次关闭调用的预编译器和连接器释放资源。 10、再写查询方法查询的方法和增删改一样但是在mysql里返回的结果一般来说是个n*n的二维数组而在executeQuery方法里返回的是一个ResultSet的结果集对象这时候我们需要把结果集的内容依次放到二维数组里输出。前面的写法和增删改基本上一样只不过多了一个结果集的初始化。ResultSet是一个接口有点像是一个集合。把结果集对象输出为二维数组首先二维数组的行数是不能确定的但是列数时可以确定的(这里我们就先不严谨的把ArrayList集合说成为数组好理解一些)因此我们调用结果集的getMetaDate再调用getColumnCount方法获取总的列数然后定义一个嵌套ArrayList集合。然后通过结果集的next()方法遍历结果集对遍历的每一个结果都放到内层的集合里一旦结果集读取到列数的最大值则把这一行(内层集合)作为一个元素赋值给外层元素。等全部读完了就可以返回这个二维数组了。最后依次倒序关闭结果集、预编译器、连接器。 代码如下
package cn.kb10.jdbc2;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public final class BaseDao extends BaseConfig{private PreparedStatement getPst(Connection con,String sql, Object...params) throws SQLException {PreparedStatement pst con.prepareStatement(sql);if (params.length0){for (int i 0; i params.length; i) {pst.setObject(i1,params[i]);}}return pst;}public Result exeNonQuery(String sql,Object...params){Connection con null;PreparedStatement pst null;try {con getCon();pst getPst(con,sql,params);return Result.succeed(pst.executeUpdate());} catch (SQLException e) {return Result.fail();}finally {close(pst,con);}}public Result exeQuery(String sql,Object...params){Connection con null;PreparedStatement pst null;ResultSet rst null;try {con getCon();pst getPst(con,sql,params);rst pst.executeQuery();ListListString data new ArrayList();if (null!rstrst.next()){final int CC rst.getMetaData().getColumnCount();do{ListString row new ArrayList(CC);for (int i 1; i CC ; i) {row.add(rst.getObject(i).toString());}data.add(row);}while (rst.next());}return Result.succeed(data);}catch (Exception e){return Result.fail();}finally {close(rst,pst,con);}}
}四、结果集类
使用泛型存结果统一输出格式
package cn.kb10.jdbc2;public final class ResultT {//统一格式的类private boolean err;private T data;//方法集泛型public static T Result succeed(T data){return new Result(false,data);}public static Result fail(){return new Result(true,null);}private Result(boolean err, T data) {this.err err;this.data data;}public boolean isErr() {return err;}public T getData() {return data;}
}
五、实现JDBC操作数据库
11、这里就不多说了直接贴查询和增删改的测试代码就是new一个对象然后输出结果即可。