今天初学数据库的一些简单创建数据库和表,并进行简单的查询,插入。
接下学习的就是java工程中怎么链接数据库呢。主要的方法和用到的类如下。
切记,mysql需要的jar包 mysql-connector-java-5.1.7-bin.jar
sqlserver需要的jar包 sqljdbc4.jar
oracle需要的jar包 ojdbc6.jar
注意:下面用到的类不是jar中的,而是java.sql中的类。
以下是三个常用数据库的连接实现
一、sqlserver
package com.direct.database; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class TestPreparedStatement { public static List< Student> list = new ArrayList<Student>();//存学生对象的集合 public int a; public void flag(){ a = 10; System.out.println(a); //驱动类 String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //url地址 String url = "jdbc:sqlserver://localhost:1433;databaseName=test"; String userName = "sa"; String password = "123456"; Connection conn = null;//用于应用程序和数据的连接 Statement stmt = null;//已经创建连接的基础上,向数据库发送SQL语句 ResultSet rs = null;//暂时存放数据库查询操作所获得的结果 try { //加载驱动类 Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { //得到一个连接 conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=test", "sa","123456");//得到一个连接 stmt = conn.createStatement(); rs = stmt.executeQuery("select * from Info");//执行SQL语句,并存在ResultSet对象中 while (rs.next()) { //存对象到集合 Student student = new Student(rs.getString("id"), rs.getString("name"), rs.getString("sex")); TestPreparedStatement.list.add(student); System.out.print(rs.getString("id")); //读取数据 System.out.print(rs.getString("name")); System.out.print(rs.getString("sex")); System.out.println(); } // 创建PreparedStatement对象 //PreparedStatement pstmt = conn.prepareStatement("insert into Info values(?, ? ,?)");//添加 //删除 PreparedStatement pstmt1 = conn.prepareStatement("delete from Info where id = ? and name = ?"); //使用set方法设置参数 PreparedStatement pstmt2 = conn.prepareStatement("update Info set name=? where name ='star' "); pstmt1.setInt(1, 4); pstmt1.setString(2, "the");//根据id和name删除数据库的内容 /*pstmt.setInt(1, 1); pstmt.setString(2, "star"); pstmt.setString(3, "nan");//添加数值对到数据库 */ pstmt2.setString(1, "super");//更新数据 pstmt2.executeUpdate(); //pstmt.executeUpdate(); pstmt1.executeUpdate();//执行PreparedStatement语句 } catch (SQLException e) { e.printStackTrace(); }finally{ //关闭连接 try { rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("----------------"); for (int i = 0; i < TestPreparedStatement.list.size(); i++) { System.out.println(TestPreparedStatement.list.get(i)); } } public static void main(String[] args) { new TestPreparedStatement().flag(); } }
二、mysql方式一
package com.dkt.mysql.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MysqlConnection { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } Connection conn=null; PreparedStatement prep = null; Statement state = null; ResultSet rs = null; try { String url = "jdbc:mysql://localhost:3306/mytest"; conn = DriverManager.getConnection(url, "root", "123456"); state = conn.createStatement(); prep = conn.prepareStatement("select * from useinfo"); rs = prep.executeQuery(); while (rs.next()) { int id= rs.getInt("userId"); String name= rs.getString("userName"); String sex = rs.getString("userSex"); System.out.println("从mysql读取的数据:"+id+"---------"+name+"--------"+sex); } } catch (SQLException e) { e.printStackTrace(); }finally{ try { if(rs==null) rs.close(); if(prep==null) prep.close(); if(state==null) state.close(); if(conn==null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
二、mysql方式二
使用jdbc.properties配置文件方式
className=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mytest userName=root password=123456
package com.dkt.mysql.util; import java.io.InputStream; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; /* * 反射链接: 什么是反射? * 我们在程序运行时得到一个字符串,这个字符串是某个类名称, * 如果要实例化这个类,就需要用到反射。 * 在工程下的src中创建file文件,命名为 jdbc.properties(配置文件) * 里面存放是键值对的形式。 * 在java 程序中以文件输入流的形式加载进来 * * 加载驱动 Class.forName(); * oracle: oracle.jdbc.driver.OracleDriver * mysql: com.mysql.jdbc.Driver * * 链接数据库 DriverManager.getConnection(url,user,password); * mysql:url如下 * jdbc:mysql://localhost:3306/databaseName?userUnicode=true&characterEncoding=utf-8 * "jdbc:mysql://localhost:3306/mytest" */ public class Uconn { public static void main(String[] args) { new Uconn().conn(); } public void conn(){ Connection conn=null; PreparedStatement ps = null; ResultSet rs = null; //从配置文件中获得加载驱动信息 InputStream in = getClass().getClassLoader().getResourceAsStream("jdbc.properties"); Properties proper = new Properties(); try { proper.load(in); String className = proper.getProperty("className"); String url = proper.getProperty("url"); String userName= proper.getProperty("userName"); String password = proper.getProperty("password"); Driver driver = (Driver) Class.forName(className).newInstance(); System.out.println(driver); String sql = " select * from useInfo where userName='娜娜' ";//sql语句,查询useInfo表的数据 conn = DriverManager.getConnection(url, userName, password); ps = conn.prepareStatement(sql);// 进行sql语句的预编译,防止sql注入 rs = ps.executeQuery(); System.out.println(rs.next()); while (rs.next()) { int id= rs.getInt("userId"); String name= rs.getString("userName"); String sex = rs.getString("userSex"); System.out.println("从mysql读取的数据:"+id+"---------"+name+"--------"+sex); } } catch (Exception e) { e.printStackTrace(); } finally{ try { if(rs==null) rs.close(); if(ps==null) ps.close(); if(conn==null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
三、oracle
package com.dkt.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class JdbcOracle { public static void main(String[] args) { JdbcOracle oracle = new JdbcOracle(); oracle.testOracle(); } /** * 一个非常标准的连接Oracle数据库的示例代码 */ public void testOracle(){ Connection con = null;// 创建一个数据库连接 PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement ResultSet result = null;// 创建一个结果集对象 try { Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序 System.out.println("开始尝试连接数据库!"); String url = "jdbc:oracle:thin:@localhost:1521:orcl";// 127.0.0.1是本机地址,XE是精简版Oracle的默认数据库名 String user = "scott";// 用户名,系统默认的账户名 String password = "tiger";// 你安装时选设置的密码 con = DriverManager.getConnection(url, user, password);// 获取连接 System.out.println("连接成功!"); String sql = "select * from scott.emp where ename=?";// 预编译语句,“?”代表参数 pre = con.prepareStatement(sql);// 实例化预编译语句 pre.setString(1, "KING");// 设置参数,前面的1表示参数的索引,而不是表中列名的索引 result = pre.executeQuery();// 执行查询,注意括号中不需要再加参数 while (result.next()){ // 当结果集不为空时 System.out.println("编号:" + result.getInt("empno") + ",姓名:" + result.getString("ename")+",工资:"+result.getInt("sal")); } } catch (Exception e) { e.printStackTrace(); } finally { try { // 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源 // 注意关闭的顺序,最后使用的最先关闭 if (result != null) result.close(); if (pre != null) pre.close(); if (con != null) con.close(); System.out.println("数据库连接已关闭!"); } catch (Exception e) { e.printStackTrace(); } } } }