jsp页面前台用jdbc如何获取sql数据库里的数据。

jsp页面前台用jdbc如何获取sql数据库里的数据。,第1张

1、在后台写一个JDBC方法,从数据库中查询出数据来,封装到一个集合中,比如碰磨List或Map,然毕橘后放到request中,在前台直接从request获取即可。

2、直接在前台写一个JDBC *** 作的脚本方法,从数据库中查询出数据,封装到集合中笑数斗,然后根据需要迭代显示。

package club.di6.util

import java.sql.DriverManager

import java.sql.Connection

public class DatabaseUtil {

public static Connection getConnection(){

Connection conn = null

String serviceAddress = "//localhost:3306"//数据库地址

String username = "root"//数据库用户

String password = "rr123456"//密码

try {

Class.forName("com.mysql.jdbc.Driver")

String url = "jdbc:mysql:"+serviceAddress+"/briup?user="+username+"&password="+password

conn = DriverManager.getConnection(url)

System.out.println("数据库连旅虚接成功")

} catch (Exception e) {

e.printStackTrace()

}

return conn

}

}

使用的时候直接Connection conn = DatabasesUtil.getConnection()就可以了

记得把里面御野的数据库拆拆燃地址和用户名密码改成自己的。

获取新插入Oracle数据库Sequence值的5种方法如下:

//公共代码:得到数据库连接

public Connection getConnection() throws Exception{

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

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:dbname", "username", "password")

return conn

}

//方法一

//先用select seq_t1.nextval as id from dual 取到新的sequence值。

//然后将最新的值通过变量传递给插入的语句:insert into t1(id) values(?)

//最后返回开始取到的sequence值。

//这种方法的优点代码简单直观,使用的人也最多,缺点是需要两次sql交互,性能不佳。

public int insertDataReturnKeyByGetNextVal() throws Exception {

Connection conn = getConnection()

String vsql = "select seq_t1.nextval as id from dual"

PreparedStatement pstmt =(PreparedStatement)conn.prepareStatement(vsql)

ResultSet rs=pstmt.executeQuery()

rs.next()

int id=rs.getInt(1)

rs.close()

pstmt.close()

vsql="insert into t1(id) values(?)"

pstmt =(PreparedStatement)conn.prepareStatement(vsql)

pstmt.setInt(1, id)

pstmt.executeUpdate()

System.out.print("id:"+id)

return id

}

//方法二

//先用insert into t1(id) values(seq_t1.nextval)插入源搏数据。

//然后使用select seq_t1.currval as id from dual返回刚才插入的记录生成的sequence值。

//注:seq_t1.currval表示取出当前会话的最后生成的sequence值,由于是用会话隔离,只要保证两个SQL使用同一个Connection即可,对于采用连接池应用需要将两个SQL放指棚在同一个事务内才唯裂则可保证并发安全。

//另外如果会话没有生成过sequence值,使用seq_t1.currval语法会报错。

//这种方法的优点可以在插入记录后返回sequence,适合于数据插入业务逻辑不好改造的业务代码,缺点是需要两次sql交互,性能不佳,并且容易产生并发安全问题。

public int insertDataReturnKeyByGetCurrVal() throws Exception {

Connection conn = getConnection()

String vsql = "insert into t1(id) values(seq_t1.nextval)"

PreparedStatement pstmt =(PreparedStatement)conn.prepareStatement(vsql)

pstmt.executeUpdate()

pstmt.close()

vsql="select seq_t1.currval as id from dual"

pstmt =(PreparedStatement)conn.prepareStatement(vsql)

ResultSet rs=pstmt.executeQuery()

rs.next()

int id=rs.getInt(1)

rs.close()

pstmt.close()

System.out.print("id:"+id)

return id

}

//方法三

//采用pl/sql的returning into语法,可以用CallableStatement对象设置registerOutParameter取得输出变量的值。

//这种方法的优点是只要一次sql交互,性能较好,缺点是需要采用pl/sql语法,代码不直观,使用较少。

public int insertDataReturnKeyByPlsql() throws Exception {

Connection conn = getConnection()

String vsql = "begin insert into t1(id) values(seq_t1.nextval) returning id into :1end"

CallableStatement cstmt =(CallableStatement)conn.prepareCall ( vsql)

cstmt.registerOutParameter(1, Types.BIGINT)

cstmt.execute()

int id=cstmt.getInt(1)

System.out.print("id:"+id)

cstmt.close()

return id

}

//方法四

//采用PreparedStatement的getGeneratedKeys方法

//conn.prepareStatement的第二个参数可以设置GeneratedKeys的字段名列表,变量类型是一个字符串数组

//注:对Oracle数据库这里不能像其它数据库那样用prepareStatement(vsql,Statement.RETURN_GENERATED_KEYS)方法,这种语法是用来取自增类型的数据。

//Oracle没有自增类型,全部采用的是sequence实现,如果传Statement.RETURN_GENERATED_KEYS则返回的是新插入记录的ROWID,并不是我们相要的sequence值。

//这种方法的优点是性能良好,只要一次sql交互,实际上内部也是将sql转换成oracle的returning into的语法,缺点是只有Oracle10g才支持,使用较少。

public int insertDataReturnKeyByGeneratedKeys() throws Exception {

Connection conn = getConnection()

String vsql = "insert into t1(id) values(seq_t1.nextval)"

PreparedStatement pstmt =(PreparedStatement)conn.prepareStatement(vsql,new String[]{"ID"})

pstmt.executeUpdate()

ResultSet rs=pstmt.getGeneratedKeys()

rs.next()

int id=rs.getInt(1)

rs.close()

pstmt.close()

System.out.print("id:"+id)

return id

}

//方法五

//和方法三类似,采用oracle特有的returning into语法,设置输出参数,但是不同的地方是采用OraclePreparedStatement对象,因为jdbc规范里标准的PreparedStatement对象是不能设置输出类型参数。

//最后用getReturnResultSet取到新插入的sequence值,

//这种方法的优点是性能最好,因为只要一次sql交互,oracle9i也支持,缺点是只能使用Oracle jdbc特有的OraclePreparedStatement对象。

public int insertDataReturnKeyByReturnInto() throws Exception {

Connection conn = getConnection()

String vsql = "insert into t1(id) values(seq_t1.nextval) returning id into :1"

OraclePreparedStatement pstmt =(OraclePreparedStatement)conn.prepareStatement(vsql)

pstmt.registerReturnParameter(1, Types.BIGINT)

pstmt.executeUpdate()

ResultSet rs=pstmt.getReturnResultSet()

rs.next()

int id=rs.getInt(1)

rs.close()

pstmt.close()

System.out.print("id:"+id)

return id

}


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

原文地址: http://outofmemory.cn/bake/11967430.html

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

发表评论

登录后才能评论

评论列表(0条)

保存