JDBC连接数据库的步骤详解

 

 Java Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
 

JDBC连接数据库   
•创建一个以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() ;
            }
        }

 

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
编译Qconf git clone https://github.com/Qihoo360/QConf.git cd Qconf //注意如果不是root永恒,可能需要使用sudo权限 mkdir build cd build // 默认安装在/usr/local/qconf目录,后面的命令指定安装目录 cmake ..  或者 cmake .. -DCMAKE_INSTALL_PREFIX=/install/prefix make make install //如果出错,也就下面几个错误了 sudo l

Java 使用默认浏览器打开 URL - 2016-09-22 19:09:07

      URI uri = new URI(url);Desktop desktop = Desktop.getDesktop();if (desktop.isSupported(Desktop.Action.BROWSE)) {desktop.browse(uri);}            

Java线程Dump分析工具--jstack - 2016-09-22 18:09:03

Java线程Dump分析工具--jstack jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:      jstack [-l][F] pid      如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另

java spring整合websocket - 2016-09-21 17:09:03

这几天项目中需要整合websocket来支持业务,从网上看了好多资料。但是都很杂乱,我尝试了好多回,走了很多弯路,跳了很多坑~~~~~~。通过两天的调试终于成功!!!现在把调试步骤和容易出现的问题都列出来,让和我这样的新手有点帮助。开始上代码......... 【 备注:spring的版本4.0+ ,tomcat :7.50 + , jdk:1.8 】 java Spring 整合 websocket 有两种方法 : 1:配置方法 [网上有很多] (地址: http://blog.csdn.net/sti

Java命令行classpath的设置 - 2016-09-21 17:09:03

在练习JavaDB Embedded模式的Java编程时候,直接用编辑器开发,所以需要用平时不怎么用的命令行来编译代码,按照普通的方式进行编译之后,开始运行,结果弹出错误提示。 java -classpath derby.jar JavaDBTest 错误: 找不到或无法加载主类 JavaDBTest 想不通是怎么回事。后来发现,需要将当前目录也加入到ClassPath中 java -classpath .;derby.jar JavaDBTest 这样才能成功运行 Load the EmbeddedDri

java 虚拟机-内存管理 - 2016-09-21 14:09:23

      本地方法 非java代码实现的java方法,使用native关键字,除abstract外可与java关键字连用 程序计数器 可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能。该区域时java虚拟机规范中没有规定outofmeroryError情况的区域 虚拟机栈   1、生命周期同线程一致 2、程序员通常指的栈内存区,更确切的是指虚拟机栈中的局部变量表部分 3、局部变量表存
jAVA基础 提高文件复制性能之多线程复制文件 利用IO流中的随机访问文件 RandomAccessFile 和文件通道 FileChanne 复制文件可大大提高文件的读写效率,在此基础上利用多线程复制文件使其性能更优。因线程的个数可根据文件的大小及需求而定。其大概原理是根据给定的线程个数,将文件分段,每个线程负责的数据大小=文件长度/线程个数,将不能除尽的部分留给最后一段文件所分配的线程处理。以下是实现代码及自己理解的注释,多有偏差请见谅。下面是兄弟连java培训总结的一些代码:供参考。 程序实现类代码
这个是我一个技术相当好的哥们去面试的时候碰到的奇葩问题,那天,这个面试官的答案是不能。后来就带着这个问题去国内外的论坛上搜了一把,也是各说纷纭,实在是没有一个统一的答案,简直有点公说公有理,婆说婆有理的架势。     几个意见大致如下,第一,不能,因为“进程是CPU进行调度的单位,而JVM是一个进程,于是就只能跑在一个CPU上”。第二,“进程是CPU进行调度的单位,这没错,但是OS负责将一个进程在不同的CPU上调度到另外一个CPU上,而这个进程,则是由不同的线程构成的,那么说,线程还是在不同的CPU上运行了
1、一个简单的订单号生成器: 从代码可以看出: long orderNo = (Long.parseLong((date))) * 10000;   orderNo += orderNum + Long.parseLong(RandomStringUtils.randomNumeric(3)); 每毫秒可以保证,10000-999个订单号不重复。     import java.text.SimpleDateFormat;import java.util.Date;import org.apache.co
Java是世界上最流行的程序语言,从1995年问世以来,Java的生态系统在一直在蓬勃的发展着。作为一门健壮的技术,Java社区为广大开发者提供了包括框架、库、web开发sdk、JVM语言等资源。在各种科技行业都能够找到关于Java编程的相关资源,这就是为什么Java会如此受人喜爱。 在今天,发达的网络技术推动了Java的发展,越来越多的人选择在网上学习,查看技术大牛的博客并进行交流成为了日常学习的一个重要手段。在这里,我整理了国外最流行的十大Java技术博客,它们都是由Java技术专家维护的,无论是初学