文档章节

Java连接数据库

火力全開
 火力全開
发布于 2016/10/06 00:42
字数 1679
阅读 7
收藏 0

创建一个以JDBC连接数据库的程序,包含7个步骤:

1、加载JDBC驱动程序:

在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。
例如:

try{   
	//加载MySql的驱动类   
	Class.forName("com.mysql.jdbc.Driver") ;   
}catch(ClassNotFoundException e){   
	System.out.println("找不到驱动程序类 ,加载驱动失败!");   
	e.printStackTrace();  
}

成功加载后,会将Driver类的实例注册到DriverManager类中。

2、提供JDBC连接的URL

• 连接URL定义了连接数据库时的协议、子协议、数据源标识。
• 书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk;

useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。

3、创建数据库的连接

•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
•使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。

例如:

//连接MySql数据库,用户名和密码都是root   
String url = "jdbc:mysql://localhost:3306/test" ;    
String username = "root" ;   
String password = "root" ;   
try{   
	Connection con =    
	DriverManager.getConnection(url , username , password ) ;   
}catch(SQLException se){   
	System.out.println("数据库连接失败!");   
	se.printStackTrace() ;   
}

4、创建一个Statement

•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3
种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:

Statement stmt = con.createStatement() ;   
PreparedStatement pstmt = con.prepareStatement(sql) ;   
CallableStatement cstmt =    
con.prepareCall("{CALL demoSp(? , ?)}") ;

5、执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:

ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   
int rows = stmt.executeUpdate("INSERT INTO ...") ;   
boolean flag = stmt.execute(String sql) ;

6、处理结果

两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:

while(rs.next()){   
	String name = rs.getString("name") ;   
	String pass = rs.getString(1) ; // 此方法比较高效   
}
(列是从左到右编号的,并且从列1开始)

7、关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象


if(rs != null){   // 关闭记录集   
	try{   
		rs.close() ;   
	}catch(SQLException e){   
		e.printStackTrace() ;   
	}   
}   
if(stmt != null){   // 关闭声明   
	try{   
		stmt.close() ;   
	}catch(SQLException e){   
		e.printStackTrace() ;   
	}   
}   
if(conn != null){  // 关闭连接对象   
	try{   
		conn.close() ;   
	}catch(SQLException e){   
		e.printStackTrace() ;   
	}   
}


---------------------------------分割线---------------------------------

一、如何通过JDBC访问数据库

JDBC:Java DataBase Connectivity数据库连接用于在java程序中实现操作数据库。一般步骤如下:

加载JDBC驱动器。将数据库的JDBC驱动加载到classPath,web工程的一般放大WEB-INF/lib/下,java工程项目的则用build path将jar包导进去。
加载JDBC驱动,并将其注册到DriverManager中,一般使用反射Class.forName(String driveName).
简历数据库连接,取得Connection对象。一般通过Driver.getConnection(url,username,password)方法实现。
建立Statement对象或是PreparedStatement对象。
执行SQL语句
访问结果集ResultSet
依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放掉所占用的资源。
实例代码如下:

首先创建一张表:

create tabel Employee(
	id int primarykey,
	name varchar(20),
	age int
);

示例程序:

import java.sql.*;
 
public class Test{
 
	public static void main(String args[]){
	 
		String user = "user1";
		String password = "pwd";
		String url = "jdbc:mysql://127.0.0.1:3306/Test";
		String driver = "com.mysql.jdbc.Driver";
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		 
		try{
			Class.forName(driver);
			con=DriverManager.getConnection(url,user,password);
			stmt=con.createStatement();
			stmt.execute("insert into Employee values(1,'James1',36)");
			rs=stmt.executeQuery("select * from Employee");
			while(rs.next()){
				System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getInt(3));
			}
		}catch(SQLException e){
			System.out.println(e.getMessage());
		}finally{
			try{
				if(rs!=null) rs.close();
				if(stmt!=null) stmt.close();
				if(con!=null) con.close();
				 
			}catch(SQLException =e){
				System.out.println("fe:"+e.getMessage());
			}
		}
	}
}

二、Statement、PreparedStatement和CallableStatement的区别

Statement一般用于执行不带参数的SQL语句,并返回生成的结果,每次执行SQL语句时,数据库都要编译该SQL语句。
PerparedStatement表示 与的SQL语句对象,用于执行带参数的SQL语句。效率高、安全性好、代码可读性和可维护性好。(推荐使用)
CallableStatement用来调用数据库中存储过程的接口,如果有输出参数要注册,说明是输出参数。
举例说明PreparedStatement:

 

import java.sql.*;
 
public class Test{
 
	public static void main(String args[]){
		String user="user1";
		String password="pwd";
		String url="jdbc:mysql://127.0.0.1:3306/Test";
		String driver="com.mysql.jdbc.Driver";
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		 
		try{
			Class.forName(driver);
			con=DriverManager.getConnection(url,user,password);
			ps=con.preparedStatement("select * from Emloyee where id=?");
			ps.setInt(1,1);
			rs=ps.executeQuery();
			while(rs.next()){
				System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getInt(3));
			}
		}catch(SQLException e){
			System.out.println(e.getMessage());
		}finally{
			try{
				if(rs!=null)rs.close();
				if(ps!=null)ps.close();
				if(con!=null)con.close();
			}catch(SQLException fe){
				System.out.println("fe:"+fe.getMessage());
			}
		}
	}
}

三、getString()方法和getObject()方法有什么区别

在数据量很大的时候直接调用ResultSet方法的getString、getInt、getData方法会抛出异常:OrcaleException。此时应该使用getObject方法。因为其他方法会将查询结果都加载到内存中,如果数据量超过内存上限,则会导致异常。

四、JDBC与Hibernate有什么区别

Hibernate是JDBC的封装。采用配置文件的形式将数据库连接参数写到XML文件中。(下次再研究Hibernate)

package com.test;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 *
 * @author Hongten</br>
 * @date 2012-7-16
 *
 */
public class JDBCTest {
    public static void main(String[] args) {
        String driver = "com.mysql.jdbc.Driver";
        String dbName = "spring";
        String passwrod = "root";
        String userName = "root";
        String url = "jdbc:mysql://localhost:3308/" + dbName;
        String sql = "select * from users";
 
        try {
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, userName,
                    passwrod);
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println("id : " + rs.getInt(1) + " name : "
                        + rs.getString(2) + " password : " + rs.getString(3));
            }
 
            // 关闭记录集
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            // 关闭声明
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            // 关闭链接对象
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}

 

原文链接

Java数据库操作
完整java开发中JDBC连接数据库代码和步骤

本文转载自:http://www.kuqin.com/shuoit/20150901/347855.html

火力全開
粉丝 21
博文 222
码字总数 18877
作品 0
卢湾
高级程序员
JDBC连接MySQL数据库及示例

DBC是Sun公司制定的一个可以用Java语言连接数据库的技术。 一、JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提...

aminqiao
2014/06/10
0
1
JDBC(Java Data Base Connectivity,java数据库连接)

JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法,JDBC对...

冰雷卡尔
2012/06/03
0
0
在tomcat下context.xml中配置各种数据库连接池(转)

Tomcat6的服务器配置文件放在 ${tomcat6}/conf 目录底下。我们可以在这里找到 server.xml 和 context.xml。当然,还有其他一些资源文件。但是在在本文中我们只用得上这两个,其他的就不介绍了...

徐龙
2012/07/02
0
4
Hinernate中获得数据库连接池的方式及应用

Hibernate可以与任何一种java应用的运行环境集成。Java应用的运行环境可分为两种。 (1)受管理环境(Managed environment):由容器负责管理各种共享资源(如线程池和数据库连接池),以及管理...

_守望者_
2014/04/22
0
0
Android———利用JDBC连接服务器数据库

1、Android平台下与服务器数据库通信的方法 在Android平台下,连接电脑服务器的MySQL、PostgreSQL、Oracle、Sybase、Microsoft SQLServer等数据库管理系统DBMS(database management system),...

xiahuawuyu
2012/10/10
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

react native 开发碰到的问题

react-navigation v2 问题 问题: static navigationOptions = ({navigation, navigationOptions}) => ({ headerTitle: ( <Text style={{color:"#fff"}}>我的</Text> ), headerRight: ( <View......

罗培海
30分钟前
0
0
Mac Docker安装流程

久仰Docker大名已久,于是今天趁着有空,尝试了一下Docker 先是从docker的官网上下载下来mac版本的docker安装包,安装很简易,就直接拖图标就好了。 https://www.docker.com/products/docker...

writeademo
38分钟前
0
0
TensorFlow rnn mnist 分类

使用rnn 对mnist进行分类 参考 http://www.360doc.com/content/17/0321/10/10408243_638692495.shtml 网络定义 其中最后一层不需要进行sofmax,lstmcell返回的数据是两个,一个是阶段性的,一...

阿豪boy
40分钟前
0
0
使用ELK构建微服务的日志平台

1 概述 在微服务架构中,会部署众多的应用,其中有基础应用,比如:网关,服务发现等。同时还有大量的业务应用。所以,如何有效的收集它们的日志,并且方便查询,同时提供友好的可视化展示,...

Java大蜗牛
48分钟前
0
0
Spring源码阅读——4

BeanDefinitionHolder的创建 Spring框架中BeanDefinition的继承结构如下图: BeanDefinition是配置文件<bean>元素标签在容器中内部表示形式。<bean>元素标签拥有class、scope、lazy-init等配...

叶枫啦啦
56分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部