java JDBC链接sqlserver/mysql/oracle

java  JDBC链接sqlserver/mysql/oracle

今天初学数据库的一些简单创建数据库和表,并进行简单的查询,插入。

接下学习的就是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();
	        }
	    }
	}
	
}