请告诉我一个实时的情况来比较String,StringBuffer和StringBuilder?
我应该将哪个JDBC连接池库用于新的应用程序项目(而不是Web应用程序)?
我应该选择BoneCP吗?我没有任何巨大的要求.我只需要一个好的,易于使用的数据库连接池,即正在开发中.图书馆,作者可以回复错误报告,回答一些具体问题等.
顺便说一下,实际上,我只使用MySQL.我发现,MySQL驱动程序支持DriverManager接口,但我不确定它是否实际上是连接池.
如何做Object.hashCode()和System.identityHashCode()工作在后端?是否identityHashCode()返回对象的引用?是否hashCode()取决于?对象?==运算符如何在后端工作.
hashCode()和之间有什么区别identityHashCode()?
需要代码在java中创建连接池吗?我们如何确保连接池不返回已在使用的同一对象?如果客户端从连接池中取出连接后关闭连接会怎么样?
我想用简单的Java术语创建它,并希望看到它在多线程环境中如何工作.我的意思是哪些方法将同步,哪些方法不同步.这门课还会成为公共课吗?如果是,则任何人都可以访问此类并重新初始化连接池?
我有一些代码如下.但我不知道如何"关闭来自池的连接将其返回到池中,它不会在物理上关闭连接." 此外,我没有理解这一点"因为如果连接已从池中借用而尚未返回,则它不是"可用"且无法重新分配给池中的另一个客户端.
import java.util.*;
import java.sql.*;
class ConnectionPoolManager
{
String databaseUrl = "jdbc:mysql://localhost:3306/myDatabase";
String userName = "userName";
String password = "userPass";
Vector connectionPool = new Vector();
public ConnectionPoolManager()
{
initialize();
}
public ConnectionPoolManager(
//String databaseName,
String databaseUrl,
String userName,
String password
)
{
this.databaseUrl = databaseUrl;
this.userName = userName;
this.password = password;
initialize();
}
private void initialize()
{
//Here we can initialize all the information that we need
initializeConnectionPool();
}
private void initializeConnectionPool()
{
while(!checkIfConnectionPoolIsFull())
{ …Run Code Online (Sandbox Code Playgroud) 我试图确定我是否实际使用JDBC连接池.经过一些研究,实施几乎看起来太容易了.事实上比常规连接更容易,所以我想验证.
这是我的连接类:
public class DatabaseConnection {
Connection conn = null;
public Connection getConnection() {
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName("com.mysql.jdbc.Driver");
bds.setUrl("jdbc:mysql://localhost:3306/data");
bds.setUsername("USERNAME");
bds.setPassword("PASSWORD");
try{
System.out.println("Attempting Database Connection");
conn = bds.getConnection();
System.out.println("Connected Successfully");
}catch(SQLException e){
System.out.println("Caught SQL Exception: " + e);
}
return conn;
}
public void closeConnection() throws SQLException {
conn.close();
}
Run Code Online (Sandbox Code Playgroud)
}
这是真正的连接汇集吗?我在另一个类中使用连接如下:
//Check data against database.
DatabaseConnection dbConn = new DatabaseConnection();
Connection conn;
ResultSet rs;
PreparedStatement prepStmt;
//Query database and check username/pass against table.
try{
conn = dbConn.getConnection(); …Run Code Online (Sandbox Code Playgroud) 我正在使用JDBC与我的Postgres数据库交谈.如果我的整个应用程序都运行一个连接,即只有一个呼叫;
DriverManager.getConnection("jdbc:postgresql://host:5432/database", user, pass);
Run Code Online (Sandbox Code Playgroud)
但是这个Connection对象在Java中的多个线程之间共享,我是否正确地假设任何使用SQL事务(BEGIN和COMMIT样式)的尝试只会非常混乱和破坏,因为Java线程可能会交错?请问Connection对象"知道"哪些Java线程使用它来进行查询?
我应该Connection每个Java线程有一个对象并以这种方式使用SQL事务吗?或者我应该在Java中执行所有事务隔离synchronized吗?
我创建了这个返回连接对象的类.我用过MySQL数据库.
public class Connect_db {
public Connection getConnection(String db_name,String user_name,String password)
{
Connection con=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost/"+db_name+"?user="+user_name+"&password="+password);
}
catch(Exception e)
{
e.printStackTrace();
}
return con;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想做的就是实例化这个类一次并得到连接对象.我想在整个应用程序中使用同一个对象.另一个解决方案也将受到赞赏.
在Java中
字符串常量池中的字符串文字不是垃圾收集的,因为它们是从运行时实例创建的引用表中引用的,以便优化空间.
如果字符串文字池的大小超过那么,因为字符串文字池中的每个字符串都有引用,因此它不符合GC的条件.它是如何由JVM处理的?
我想了解connection pooling in java,我jsp, servlet and tomcat 6 server在我的申请中使用.我在以下代码中编写了以下代码java class dbconnection.java:
我在windows Xp OS中使用类型4 jdbc连接与oracle 10g EE
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class dbconnection {
public Connection con = null;
public Connection getConnection() throws Exception, SQLException
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:abc","abc", "abc");
}
catch(Exception e)
{
}
return con;
}
public void removeConnection() throws SQLException
{
con.close();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我connection在servlet中重试如下:
try{
dbconnection db= new dbconnection();
Connection con=db.getConnection();
}
catch(Exception e){ …Run Code Online (Sandbox Code Playgroud) 我仍然是Java的新手,并且正在使用GUI构建器来学习Java的OO和其他编程概念.
我创建了一个非常基本的银行系统,基本上客户可以存钱和取钱.
我的代码没有特别的问题,因为一切正常,我只是有关于数据库连接的问题.
由于始终重复创建连接的代码,因此我创建了一个数据库类,如下所示:
public class DB {
static Connection c;
public static void createConnection() throws Exception{
Class.forName("com.mysql.jdbc.Driver");
DB.c = DriverManager.getConnection("jdbc:mysql://localhost:3306/bank", "root", "");
}
public static int insertUpdateDelete(String sql) throws Exception{
if(c == null){
createConnection();
}
return c.createStatement().executeUpdate(sql);
}
public static ResultSet search(String sql) throws Exception{
if(c == null)
createConnection();
return c.createStatement().executeQuery(sql);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,每当我想从数据库插入/更新/删除时,我就是这么做的:
DB.insertUpdateDelete(SQL); //SQL contains the query
Run Code Online (Sandbox Code Playgroud)
对于搜索,我会这样做:
ResultSet rs = DB.search(SQL);
Run Code Online (Sandbox Code Playgroud)
经过一些阅读后,我了解到由于"资源泄漏"和查询相互干扰,拥有静态连接对象并不是最佳实践.
我的问题是,在独立的Java应用程序中获取连接的最佳方法是什么,而不必一遍又一遍地重复相同的代码.
谢谢