java怎样连接 postgrelsql 集群

java怎样连接 postgrelsql 集群,第1张

public class Cnn { /** * 静态连接数据库函数 * @return Connection */ public static Connection getConn() { // String dbDriver="sun.jdbc.odbc.JdbcOdbcDriver"// String url="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)}DBQ=JICQ2006.mdb"// String user=""// String password=""String dbDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver"String url="jdbc:microsoft:sqlserver://localhost:1433DatabaseName=chat"String user="yong"String password="yong"Connection con=nulltry { Class.forName(dbDriver).newInstance()con=DriverManager.getConnection(url,user,password)} catch(Exception ex) { ex.printStackTrace()} return con} }

JAVA Web开发中与数据库的连接 *** 作,配置:

1、新建数据库。

新建登录角色,在新建数据库的时候把数据库的所有权交给你新建的角色。用用户和密码控制数据库。保证数据库的安全。

2、编写context.xml文件 Xml文件的目的是封装用户和密码,也是封装的一种,方便 *** 作。

以下为context.xml文件样例:

<?xml version="1.0" encoding="utf-8"?>

<Context reloadable = "true">

<Resource

name="jdbc/sampleHS"

type="javax.sql.DataSource"

maxActive="14"

maxIdle="10"

username="hstaoshu"

maxWait="5000"

driverClassName="org.postgresql.Driver"

password="hstaoshu"

url="jdbc:postgresql://localhost:5432/hstaoshu"/>

</Context>

详细说明:

name="jdbc/sampleHS"里面的ssampHS是可改名称,建议根据需要自己命名;

username="hstaoshu"

password="hstaoshu"此两项为你新建的数据库登录角色用户名和密码信息,只有匹配 了才能访问。这里简单为了表示,把用户名和密码弄成了跟数据库名字一样。其实这是很不安全的。

url="jdbc:postgresql://localhost:5432/hstaoshu"/>

这是连接数据库的URl,就像访问网站的地址一样。没有这个是无法访问数据库的。localhost:5432表示本地端口。一般不需要改动,如果你在配置数据库的时候改动过端口,那么你需要把它改回来。/hstaoshu是你的数据库名称。

其他选项请勿擅自改动。

3、编写DAO类。

DAO类的作用是与数据连接后,对数据库的一些 *** 作的封装。封装的作用。为了更好的数据管理。

DAO是真正如何使用数据库的关键步骤,前两步只是部署和配置。

private static InitialContext context = null

private DataSource dataSource = null

//一般把跟数据库的连接放在DAO类的构造函数里,只要被实例化,就能和数据库连接。

public BookDAO() {

try {

if (context == null) {

context = new InitialContext()

}

dataSource = (DataSource) context.lookup("java:comp/env/jdbc/sampleHS")

// 连接数据库,前面在context.xml文件配置里的URl

} catch (NamingException e2) {

e2.printStackTrace()

}

}

public Connection getConnection() {

Connection conn = null

try {

conn = dataSource.getConnection()// 获得数据源的连接对象

} catch (SQLException e) {

e.printStackTrace()

}

return conn

}

做完上面的三步 *** 作,开发环境已经完全和数据库连接OK,可以开始数据库的 *** 作了。一般来说,对数据库的 *** 作语句都是提前封装好的。这样修改起来会对下面的代码影响降到最小。

如下:

// ------------------数据库 *** 作语句代码封装------------------

/* 查看所有图书 */

private static final String SELECT_ALL_SQL = "SELECT * FROM book"

那么在使用的时候只要直接调用:

pstmt = conn.prepareStatement(SELECT_ALL_SQL)

首先,使用JDBC技术获取数据库连接:

public static Connection getConnection(){

try{

Class.forName("oracle.jdbc.driver.OracleDriver")

Connection con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "root", "root")

return con

}catch(Exception e){

e.printStackTrace()

return null

}

}

Class.forName(数据库驱动)

这是JVM在加载数据库驱动。

DriverManager.getConnection(url,username,password)

url是指连接数据库的地址。

像上面我写的URL是这样的:jdbc:oracle:thin:@127.0.0.1:1521:orcl

127.0.0.1是指本机,也可以用localhost代替,1521是数据库端口号(本人用的是oracle10g),orcl是指oracle_sid。username/password数据库的用户名和密码。有的数据库的url可能不是这样。当然可以去网上查一下就知道了。

这种连接方法是一次请求一次连接,是比较浪费资源的。

像tomcat,weblogic等服务器都带有连接池来避免资源的浪费,而且现在好象有规定,只要是服务器就必须带有连接池。

至于连接池的连接方法,不同的服务器有不同的获得方法。建议你用哪个就去学哪个。

有连接就有关闭数据库,获得数据库连接后一定要记得关闭资源。

public static void close(Connection con){

if(con!=null){

try{con.close()}catch(Exception e){}

}

}

为了方便,不防写成一个方法。

获取连接后,然后使用这个连接去创建相应的Statement来 *** 作数据库。

有Statement,PerparedStatement,CallableStatement这几种statement可以用来创建。

我们先看看Statement的使用。

public static void main(String[] args) {

Connection con=JDBCUtil.getConnection()

Statement stat=null

ResultSet rs=null

try{

String sql="select a_id,a_name,a_no from a"

stat=con.createStatement()

rs=stat.executeQuery(sql)

while(rs.next()){

System.err.println(rs.getInt(1)+"/"+rs.getString(2)+"/"+rs.getInt(3))

}

}catch(Exception e){

e.printStackTrace()

}

JDBCUtil.close(rs,stat,con)

}

注释:

stat=con.createStatement()是用连接创建Statement对象。

stat.executeQuery(sql)是执行查询语句。这个方法返回的是一个结果集。即ResultSet。可以将查询出来的结果放入结果集中。

rs.next()这个方法返回的一个boolean类型的值,即当指针能够往下走时,返回true,否则返回false。这样就可以保证能够遍历这个结果集了。

当然这里出现了Statement,ResultSet,那么close()方法也得变化了。

如下:

public static void close(ResultSet rs,Statement stat,Connection con){

if(rs!=null){

try{rs.close()}catch(Exception e){}

}

if(stat!=null){

try{stat.close()}catch(Exception e){}

}

if(con!=null){

try{con.close()}catch(Exception e){}

}

}

注意关闭顺序,一定是先ResultSet,后Statement,最后Connection.

由于PerparedStatement和CallableStatement都是Statement的实现类,根据JAVA多态的用法,close()方法就算完全写完了,不用改了。

现在来看看结果:

2/all/2

1/hello/1

===================================================================

现在我们用PerparedStatement来查询:

Connection con=JDBCUtil.getConnection()

PreparedStatement stat=null

ResultSet rs=null

try{

String sql="select a_id,a_name,a_no from a where a_id=?"

stat=con.prepareStatement(sql)

stat.setInt(1, 1)

rs=stat.executeQuery()

while(rs.next()){

System.err.println(rs.getInt(1)+"/"+rs.getString(2)+"/"+rs.getInt(3))

}

}catch(Exception e){

e.printStackTrace()

}

JDBCUtil.close(rs,stat,con)

这里的sql语句里有一个值是未确定的。这样就可以实现预编译,大大提高了程序的运行效率。流程如下:

stat=con.prepareStatement(sql)这个方法就将这个sql语句进行了一次编译,查看有没有什么明显的语法错误等。

如果没错,再通过stat.setInt(1, 1)将缺失的值补回去然后再执行sql查询。

PreparedStatement为批处理提供了一系统方法,让批查询、批更新等更加的效率。

让我们看看结果:

1/hello/1

==============================================================

CallableStatement是专门用于处理存储过程的。

如果想深入的学习,建议你去查看相关资料。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10835221.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存