zoukankan      html  css  js  c++  java
  • 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();
    	        }
    	    }
    	}
    	
    }
    

      

  • 相关阅读:
    Mysql5.6主从复制-基于binlog
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    socket recv阻塞与非阻塞error总结
    linux socket talkclient talkserver示例
    linux-socket connect阻塞和非阻塞模式 示例
    OPENSSL FIPS
    epoll的LT和ET使用EPOLLONESHOT
    如何在socket编程的Tcp连接中实现心跳协议
    linux网络编程:splice函数和tee( )函数高效的零拷贝
    Linux网络编程--sendfile零拷贝高效率发送文件
  • 原文地址:https://www.cnblogs.com/nn369/p/7490205.html
Copyright © 2011-2022 走看看