JDBC
Posted yahari
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC相关的知识,希望对你有一定的参考价值。
【Wed Apr 26 2017 16:05:11 GMT+0800】
PLSQL Developer连接远程oracle配置(本地不安装客户端)、
在windows机器上不想安装oracle或者oracle的客户端,我们怎么使用PLSQL Developer工具呢?答案如下:
1:在oracle官网上下载instantclient-basic-nt-11.2.0.3.0.zip该文件,
下载完成后解压该文件。如:我将其解压在E:\\oracleClient\\instantclient_11_2该路径下。进入到instantclient_11_2下创建目录NETWORK,然后再NETWORK下建立目录ADMIN。在ADMIN目录下建立tnsnames.ora文件,在该tnsnames.ora文件中添加如下内容:
1 # tnsnames.ora Network Configuration File: E:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\network\\admin\\tnsnames.ora 2 # Generated by Oracle configuration tools. 3 4 LISTENER_ORCL = 5 (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 6 7 ORACLR_CONNECTION_DATA = 8 (DESCRIPTION = 9 (ADDRESS_LIST = 10 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) 11 ) 12 (CONNECT_DATA = 13 (SID = CLRExtProc) 14 (PRESENTATION = RO) 15 ) 16 ) 17 18 ORCL = 19 (DESCRIPTION = 20 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.222)(PORT = 1521)) 21 (CONNECT_DATA = 22 (SERVER = DEDICATED) 23 (SERVICE_NAME = orcl) 24 ) 25 )
192.168.1.222:为数据库所在机器IP。
2:环境变量的配置
打开环境变量设置添加TNS_ADMIN,值为tnsnames.ora所在路径。如本机为E:\\oracleClient\\instantclient_11_2\\NETWORK\\ADMIN\\tnsnames.ora
设置ORACLE的语言,添加环境变量NLS_LANG,值为AMERICAN_AMERICA.AL32UTF8 如果出现乱码可用SIMPLIFIED CHINESE_CHINA.ZHS16GBK
3:下载并安装PLSQL Developer
安装完成后进入PLSQL Developer,选择tools->preferences->connection
Oracle Home:E:\\oracleClient\\instantclient_11_2
OCI library:E:\\oracleClient\\instantclient_11_2\\oci.dll
修改完毕后保存并重启PLSQL Developer就可以使用该工具了。
【Mon Aug 29 2016 13:34:21 GMT+0800】
1 CREATE TABLE `customers` ( 2 `id` int(11) NOT NULL auto_increment, 3 `name` varchar(30) NOT NULL, 4 `address` varchar(30) default \'\', 5 `phone` varchar(30) default \'\', 6 `email` varchar(30) default \'\', 7 `birth` date default NULL, 8 PRIMARY KEY (`id`), 9 UNIQUE KEY `name` (`name`) 10 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
【2019年1月2日 00:36:46】
PLSQL+Developer+11.06最新中文绿色注册版(免Oracle11g客户端)
编辑D:\\Dev\\Program\\DB\\PLSQL Developer\\instantclient_11_2下的tnsnames.ora,如下:
# tnsnames.ora Network Configuration File: tnsnames.ora # Generated by Oracle configuration tools. orcl = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1 )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl ) ) ) helowin15 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 223.223.185.15 )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = helowin ) ) )
即可登录成功。
001-通过Driver接口获取数据库连接
Driver 是一个接口: 数据库厂商必须提供实现的接口. 能从其中获取数据库连接。
可以通过 Driver的实现类对象获取数据库连接。
1. 加入mysql驱动
⑴解压"mysql-connector-java-5.1.7.zip"。
⑵在当前项目下新建"lib"目录。
⑶把"mysql-connector-java-5.1.7-bin.jar"复制到lib目录下。
⑷右键"Build Path"→"Add to Build Path"加入到类路径下。
1 package com.atguigu.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.Driver; 5 import java.sql.SQLException; 6 import java.util.Properties; 7 8 import org.junit.Test; 9 10 public class JDBCTest1 { 11 @Test 12 public void testDriver() throws SQLException { 13 //1. 创建一个 Driver实现类的对象 14 Driver driver = new com.mysql.jdbc.Driver(); 15 //2. 准备连接数据库的基本信息: url、user、password 16 String url = "jdbc:mysql://localhost:3306/atguigu"; 17 Properties info = new Properties(); 18 info.put("user", "root"); 19 info.put("password", "123456"); 20 //3. 调用 Driver 接口的 connect(url, info) 获取数据库连接 21 Connection connection = driver.connect(url, info); 22 System.out.println(connection); 23 } 24 }
第8行,需要加入单元测试:右键“Properties”在窗口中,首先在左边选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add Library…”按钮,选择“JUnit4”。
第16行,数据库的库名:atguigu。
编写一个通用的方法, 在不修改源程序的情况下, 可以获取任何数据库的连接
解决方案: 把数据库驱动Driver实现类的全类名、url、user、password 放入一个配置文件(jdbc.properties)中, 通过修改配置文件的方式实现和具体的数据库解耦。
1 package com.atguigu.jdbc; 2 3 import java.io.InputStream; 4 import java.sql.Connection; 5 import java.sql.Driver; 6 import java.util.Properties; 7 8 import org.junit.Test; 9 10 public class JDBCTest2 { 11 public Connection getConnection() throws Exception { 12 String driverClass = null; 13 String jdbcUrl = null; 14 String user = null; 15 String password = null; 16 //读取类路径下的jdbc.properties文件(在src下) 17 InputStream in = getClass().getClassLoader().getResourceAsStream("jdbc.properties"); 18 Properties properties = new Properties(); 19 properties.load(in); 20 driverClass = properties.getProperty("driver"); 21 jdbcUrl = properties.getProperty("jdbcUrl"); 22 user = properties.getProperty("user"); 23 password = properties.getProperty("password"); 24 //通过反射常见Driver对象 25 Driver driver = (Driver) Class.forName(driverClass).newInstance(); 26 Properties info = new Properties(); 27 info.put("user", user); 28 info.put("password", password); 29 //通过Driver的connect方法获取数据库连接. 30 Connection connection = driver.connect(jdbcUrl, info); 31 return connection; 32 } 33 @Test 34 public void testGetConnection() throws Exception{ 35 System.out.println(getConnection()); 36 } 37 }
DriverManager是驱动的管理类
⑴可以通过重载的 getConnection()方法获取数据库连接. 较为方便。
⑵可以同时管理多个驱动程序: 若注册了多个数据库连接, 则调用 getConnection()方法时传入的参数不同, 即:返回不同的数据库连接。
1 package com.atguigu.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 6 import org.junit.Test; 7 8 public class JDBCTest3 { 9 @Test 10 public void testDriverManager() throws Exception { 11 //1. 准备连接数据库的4个字符串. 12 String driverClass = "com.mysql.jdbc.Driver"; //驱动的全类名 13 String jdbcUrl = "jdbc:mysql:///atguigu"; //JDBC URL 14 String user = "root"; //user 15 String password = "123456"; //password 16 17 //2. 加载数据库驱动程序(对应的 Driver 实现类中有注册驱动的静态代码块.) 18 Class.forName(driverClass); 19 20 //3. 通过 DriverManager 的 getConnection() 方法获取数据库连接. 21 Connection connection = DriverManager.getConnection(jdbcUrl, user, password); 22 System.out.println(connection); 23 } 24 }
1 package com.atguigu.jdbc; 2 3 import java.io.InputStream; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.util.Properties; 7 8 import org.junit.Test; 9 10 public class JDBCTest4 { 11 public Connection getConnection2() throws Exception{ 12 //1. 准备连接数据库的4个字符串. 13 //⑴创建Properties对象 14 Properties properties = new Properties(); 15 //⑵ 获取jdbc.properties对应的输入流 16 InputStream in = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties"); 17 //⑶加载⑵对应的输入流 18 properties.load(in); 19 //⑷具体决定user、password 等4个字符串. 20 String user = properties.getProperty("user"); 21 String password = properties.getProperty("password"); 22 String jdbcUrl = properties.getProperty("jdbcUrl"); 23 String driver = properties.getProperty("driver"); 24 //2. 加载数据库驱动程序(对应的Driver实现类中有注册驱动的静态代码块) 25 Class.forName(driver); 26 //3. 通过DriverManager的getConnection()方法获取数据库连接. 27 return DriverManager.getConnection(jdbcUrl, user, password); 28 } 29 @Test 30 public void testGetConnection2() throws Exception{ 31 System.out.println(getConnection2()); 32 } 33 }
通过JDB 向指定的数据表中插入一条记录.
1. Statement: 用于执行SQ 语句的对象
⑴通过Connectio的createStatement()方法来获取。
⑵通过executeUpdate(sql)可以执行SQL语句。
⑶传入的SQL可以是INSRET、UPDATE或DELETE。但不能是SELECT。
2. Connection、Statement都是应用程序和数据库服务器的连接资源. 使用后一定要关闭。需要在finally中关闭Connection和Statement对象。
3. 关闭的顺序是: 先关闭后获取的, 即:先关闭Statement后关闭Connection。
1 package com.atguigu.jdbc; 2 3 import java.io.InputStream; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.sql.Statement; 7 import java.util.Properties; 8 import org.junit.Test; 9 10 public class JDBCTest5 { 11 @Test 12 public void testStatement() throws Exception{ 13 //1. 获取数据库连接 14 Connection conn = null; 15 Statement statement = null; 16 try { 17 conn = getConnection2(); 18 //3. 准备插入的SQL语句 19 String sql = null; 20 sql = "INSERT INTO customers (name, email, birth) VALUES(\'Jerry\', \'jerry@atguigu.com\', \'1991-2-12\')"; 21 // sql = "DELETE FROM customers WHERE id = 1"; 22 // sql = "UPDATE customers SET name = \'TOM\' WHERE id = 4"; 23 System.out.println(sql); 24 //4. 执行插入 25 //⑴获取操作SQL语句的Statement对象: 26 statement = conn.createStatement();//调用Connection的createStatement()方法来获取 27 //⑵调用Statement对象的executeUpdate(sql)执行SQL语句进行插入 28 statement.executeUpdate(sql); 29 } catch (Exception e) { 30 e.printStackTrace(); 31 } finally{ 32 try { 33 //5. 关闭Statement对象 34 if(statement != null) 35 statement.close(); 36 } catch (Exception e) { 37 // TODO Auto-generated catch block 38 e.printStackTrace(); 39 } finally { 40 //2. 关闭连接 41 if(conn != null) 42 conn.close(); 43 } 44 } 45 } 46 47 public Connection getConnection2() throws Exception { 48 //1. 准备连接数据库的4个字符串. 49 //⑴创建Properties对象 50 Properties properties = new Properties(); 51 //⑵获取jdbc.properties对应的输入流 52 InputStream in = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties"); 53 //⑶加载⑵对应的输入流 54 properties.load(in); 55 //⑷具体决定 user、password等4个字符串. 56 String user = properties.getProperty("user"); 57 String password = properties.getProperty("password"); 58 String jdbcUrl = properties.getProperty("jdbcUrl"); 59 String driver = properties.getProperty("driver"); 60 //2. 加载数据库驱动程序(对应的Driver实现类中有注册驱动的静态代码块) 61 Class.forName(driver); 62 //3. 通过DriverManager的getConnection() 方法获取数据库连接. 63 return DriverManager.getConnection(jdbcUrl, user, password); 64 } 65 66 @Test 67 public void testGetConnection2() throws Exception{ 68 System.out.println(getConnection2()); 69 } 70 }
版本1:通用的更新的方法(包括 INSERT、UPDATE、DELETE)版本1
******************************
ORACLE
******************************
【Tue Oct 11 2016 09:37:50 GMT+0800】
使用Oracle的plsqldev.exe之前需要启动这两个服务:OracleServiceORCL和OracleOraDb10g_home1TNSListener,在Widows命令行
net start oracleserviceorcl 和 net start OracleOraDb10g_home1TNSListener(lsnrctl start)
C:\\Users\\admin>net start oracleserviceorcl
OracleServiceORCL 服务正在启动 ......
OracleServiceORCL 服务已经启动成功。
C:\\Users\\admin>net start OracleOraDb10g_home1TNSListener
OracleOraDb10g_home1TNSListener 服务正在启动 .
OracleOraDb10g_home1TNSListener 服务已经启动成功。
【Sat Jun 10 2017 10:23:12 GMT+0800】
net start OracleServiceORCL 和 net start OracleOraDb11g_home1TNSListener
(Oracle数据库-服务-ORCL库名 和 Oracle-Ora文件-Db11g_home1TNSListener监听)
【Thu Nov 17 2016 09:19:10 GMT+0800】
在win7下安装Apahce2.2和MySQL服务
如果直接“win+R”→“cmd”
1 C:\\Users\\John>d: 2 D:\\>cd D:\\AppServ\\Apache2.2\\bin 3 D:\\AppServ\\Apache2.2\\bin>httpd -k install 4 Installing the Apache2.2 service 5 (OS 5)拒绝访问。 : Failed to open the WinNT service manager
出现第4、5行信息,主要是需要管理员权限才行。需要在打开cmd的时候用管理员身份打开,然后执行以上命令即可;也可以写一个bat文件以管理员身份也可以。
到“C:\\Windows\\SysWOW64”下打开“cmd”
1 C:\\Windows\\system32>d: 2 D:\\>cd D:\\AppServ\\Apache2.2\\bin 3 D:\\AppServ\\Apache2.2\\bin>httpd -k install 4 Installing the Apache2.2 service 5 The Apache2.2 service is successfully installed. 6 Testing httpd.conf.... 7 Errors reported here must be corrected before the service can be started. 8 9 D:\\AppServ\\Apache2.2\\bin>net start Apache2.2 10 Apache2.2 服务正在启动 . 11 Apache2.2 服务已经启动成功。 12 13 D:\\AppServ\\Apache2.2\\bin>cd D:\\AppServ\\MySQL\\bin 14 15 D:\\AppServ\\MySQL\\bin>mysqld-nt --install 16 Service successfully installed. 17 18 D:\\AppServ\\MySQL\\bin>mysql 19 ERROR 2003 (HY000): Can\'t connect to MySQL server on \'localhost\' (10061) 20 21 D:\\AppServ\\MySQL\\bin>net start mysql 22 MySQL 服务正在启动 . 23 MySQL 服务已经启动成功。 24 25 D:\\AppServ\\MySQL\\bin>mysql 26 Welcome to the MySQL monitor. Commands end with ; or \\g. 27 Your MySQL connection id is 1 28 Server version: 5.0.51b-community-nt-log MySQL Community Edition (GPL) 29 30 Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the buffer. 31 32 mysql>
【Sat Oct 22 2016 21:56:08 GMT+0800】
1 -- phpMyAdmin SQL Dump 2 -- version 3.5.3 3 -- http://www.phpmyadmin.net 4 -- 5 -- 主机: localhost 6 -- 生成日期: 2016 年 10 月 22 日 21:19 7 -- 服务器版本: 5.5.20 8 -- PHP 版本: 5.3.5 9 10 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 11 SET time_zone = "+00:00"; 12 13 14 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 15 /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 16 /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 17 /*!40101 SET NAMES utf8 */; 18 19 -- 20 -- 数据库: `ecshop` 21 -- 22 23 -- -------------------------------------------------------- 24 25 -- 26 -- 表的结构 `goods` 27 面试常用的代码片段