JDBC:
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
使用Eclipse来操作数据库有六个步骤:
1 加载驱动
2 获取链接对象
3 创建语句对象
4 循环取得结果集
5 再循环中数据类型转换
6 关闭资源
接下来做一些简单的JDBC代码实例:
注:下面的代码我用是throws Exception来抛出异常,会使结构不太严谨,因为是初学,所有没有贴出严谨结构的代码,会在最后补充。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class JDBC { public static void main(String[] args) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException { //产生JDBC Driver对象,三种方法 Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); new oracle.jdbc.driver.OracleDriver(); Class.forName("oracle.jdbc.driver.OracleDriver");//这个Driver的实例化在构建过程中会自动向DriverManager自动注册 //连接数据库 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","c##scott","root");//拿到数据库的链接 //创建语句对象statement,作用:调用方法向数据库传递SQL语句,并接受数据库返回的结果集 java.sql.Statement sts = conn.createStatement(); ResultSet rs = sts.executeQuery("select * from a_tab"); //在第一条记录的前一位, rs.next(); //循环取得结果集 while (rs.next()) { //转化数据类型 System.out.print(rs.getInt("id") + " "); System.out.print(rs.getString("name") + " "); System.out.println(rs.getString("ad") + " "); } //关闭资源 rs.close(); sts.close(); conn.close(); } }
循环取得结果集:
往数据库中添加数据:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class JDBC_03{ public static void main(String[] args) throws Exception{ //1 加载驱动 就是实例化链接对象 Class.forName("oracle.jdbc.driver.OracleDriver"); //2 获取数据库的链接 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##scott", "root"); //3 创建语句对象 传输语句并执行 还要接收返回的结果集 Statement ss = conn.createStatement(); String sql ="insert into a_tab values(123,'xiaoming','beijing')"; System.out.println(sql); ss.execute(sql); //6 关闭资源 ss.close(); conn.close(); } }
换一种方法:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import oracle.jdbc.OracleDriver; public class JDBC_04 { public static void main(String[] args) throws SQLException{ if (args.length != 3) { System.out.println("请输入三个值"); System.exit(1); } int id = Integer.parseInt(args[0]); String name = args[1]; String ad = args[2]; //加载驱动 new OracleDriver(); //获取链接, Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##scott", "root"); //创建语句 Statement st = conn.createStatement(); String sql = "insert into a_tab values('"+ id + "','"+ name +"','"+ ad +"')"; System.out.println(sql); st.executeUpdate(sql); //关闭资源 st.close(); conn.close(); } }
使用batch来添加:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.Statement; import oracle.jdbc.driver.OracleDriver; public class JDBC_06 { public static void main(String[] args) throws Exception{ //加载驱动 new OracleDriver(); //连接数据库 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##scott", "root"); //创建语句 Statement stmt = conn.createStatement(); stmt.addBatch("insert into a_tab values(10001,'hello0','addbatch')"); stmt.addBatch("insert into a_tab values(10001,'hello0','addbatch')"); stmt.addBatch("insert into a_tab values(10001,'hello0','addbatch')"); /*PreparedStatement st = conn.prepareStatement("insert into a_tab values(?,?,?)") ; st.setInt(1, 123); st.setString(2, "xiaoxiao"); st.setString(3, "beijing"); st.addBatch(); st.setInt(1, 120); st.setString(2, "xiaoxiao"); st.setString(3, "beijing"); st.addBatch(); st.executeBatch(); */ stmt.executeBatch(); //关闭 stmt.close(); conn.close(); } }
使用事务:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import oracle.jdbc.OracleDriver; public class JDBC_08 { public static void main(String[] args) throws Exception{ //加载驱动 new OracleDriver(); //链接对象 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","c##scott","root"); //传输对象 Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);//并发只读模式 //如果没有第一个参数 只能用resultset里面的next(); //有了这个参数 就能用所有方法 ResultSet rs = st.executeQuery("select * from a_tab"); rs.next();//从头顶进入第一行 System.out.println(rs.getInt(1));//第一行第一列 System.out.println(rs.getString(2)); System.out.println(rs.getString(3)); System.out.println(rs.getString(1)); System.out.println("----------------"); rs.last(); System.out.println(rs.getInt("id")); System.out.println(rs.isLast() + "-----"); rs.absolute(2); System.out.println(rs.getInt(1) + "absolute 2"); rs.previous(); System.out.println(rs.getInt(1) + "previous"); } }
最后来个集合,对数据的基本操作:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import oracle.jdbc.driver.OracleDriver; import oracle.net.aso.s; public class JDBC_09 { public static void main(String[] args) throws Exception{ //加载驱动 new OracleDriver(); //链接对象 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","c##scott","root"); //传输对象 Statement sts = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);//并发可更新 //结果集对象 ResultSet rs = sts.executeQuery("select ID,NAME,AD from a_tab"); //结果处理 rs.next(); //增 rs.updateInt(1, 9900);//第一个字段,9999 rs.updateString("NAME", "aobama"); rs.updateString("AD", "baigong"); //rs.insertRow();//把这行插入结果集和数据库 rs.moveToCurrentRow();//把光标移动到新建的行 //删 rs.absolute(2);//移动到指定行 rs.deleteRow();//删除改行 //改 rs.updateString("NAME", "newyue");//更改内存中的数据集中的数据 rs.updateRow();//把更改的数据更新到数据库中 //关闭 rs.close(); sts.close(); conn.close(); } }
严谨代码(以后工作中要使用严谨的代码结构,否则会被老板骂死的):
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.omg.CORBA.COMM_FAILURE; /** * try catch * ClassNotFoundException SQLException * * oracleproduct12.1.0dbhome_1jdbclib 把这个目录下面的 ojdbc7.jar 拿到 当前项目中 -- * 简单使用jdbc 6步 : * 1 加载驱动 * 2 获取链接/或者说链接数据库 * 3 创建语句对象 statement 作用: * 4 循环取得结果集 * 5在循环结果集中数据类型进行转换 * 6 关闭资源 */ public class JDBC_00_Decktop { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { //<一> 产生JDBC driver对象 就是说 加载驱动 有三种方法 //1.1 forName句柄 加载文件 获取实例 Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //1.2 跟上面一样 //这个Driver实例在构建过程中会向DriverManager里面自动注册,不用自己管 Class.forName("oracle.jdbc.driver.OracleDriver"); //1.3 直接实例化 new oracle.jdbc.driver.OracleDriver(); //<二> 连接数据库 --- 就是通过DriverManager的获取链接方法 传过去三个函数,数据库路径 用户名 密码 conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root"); //<三> 创建语句对象 Statement 作用:调用方法向数据库传递SQL语句,并接收返回的结果集。 stmt = conn.createStatement(); //----结果集怎么获取 rs = stmt.executeQuery("select * from c##scott.emp");//字符串内不用加分号 //rs 在第一条记录的上方 //rs.next();//返回的是boolean型 System.out.println("EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO"); //<四> 循环获取结果集 while (rs.next()) { //<五> 在循环中把数据类型进行转换得到自己想要的数据类型(java对应的数据类型) 其实我们可以随意转换,只要不失去精度就可以 System.out.print(rs.getString("empno")+" "); System.out.print(rs.getString("ename")+" "); System.out.print(rs.getString("job")+" "); System.out.print(rs.getInt("mgr")+" "); System.out.print(rs.getString("hiredate")+" "); System.out.print(rs.getInt("sal")+" "); System.out.print(rs.getInt("comm")+" "); System.out.println(rs.getInt("deptno")+" "); } } catch (Exception e) { e.printStackTrace(); }finally{ try{ if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } }catch (SQLException e2) { e2.printStackTrace(); } } } }
以上就是我在JDBC中的所学,望各位斧正!