Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为PostgreSQL编写的Java语句_Java_Postgresql - Fatal编程技术网

为PostgreSQL编写的Java语句

为PostgreSQL编写的Java语句,java,postgresql,Java,Postgresql,我想为Oracle和PostgreSQL这两个数据库创建一个简单的应用程序。有没有办法对所有数据库使用一个Java代码?我试过这个: public String init() { String user_name = null; try { Context ctx = new InitialContext(); if (ctx == null) throw new Exception("Boom - No Conte

我想为Oracle和PostgreSQL这两个数据库创建一个简单的应用程序。有没有办法对所有数据库使用一个Java代码?我试过这个:

public String init()
{
    String user_name = null;
    try
    {
        Context ctx = new InitialContext();
        if (ctx == null)
            throw new Exception("Boom - No Context");

        DataSource ds = (DataSource) ctx.lookup("jdbc/DefaultDB");

        if (ds != null)
        {
            Connection conn = ds.getConnection();

            if (conn != null)
            {
                Statement stmt = conn.createStatement();
                ResultSet rst = stmt.executeQuery("select id, user_name from user where username = " + user);
                if (rst.next())
                {
                    user_name = rst.getString("user_name");
                }
                conn.close();
            }
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return user_name;
}

如何将准备好的语句用于此代码?

这是一个非常广泛的问题,但多数据库兼容性的常用方法有两个:

  • 将所有SQL语句放在资源文件中,并在运行时加载相应的资源
  • 如果语句或逻辑结构不同(需要不同的参数等),请编写两个数据库的逻辑,并根据所使用的数据库选择正确的路径
  • 一些数据库抽象层(Hibernate、SpringJDBC)可以帮助完成大量工作,但您仍然需要非常清楚它们之间的差异和代码

    您可以通过单个java代码处理多个数据库,但是 这样,

  • 每个数据库都需要设置单独的连接
  • 您也可以在
    code
    中使用
    PreparedStatement

    String selectSQL = "select id, user_name from user where username = ?"
    PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
    
    preparedStatement.setString(1, "userName");
    
    ResultSet rs = preparedStatement.executeQuery(selectSQL);
    

    那么,到目前为止你试过什么?您应该能够使用SQL of
    从user where username=?
    中选择id、user\u name,然后适当地准备语句,设置参数并执行。现在还不清楚您的困难到底是在使用预先准备好的语句,还是在可移植性方面。请你澄清一下好吗?(您的数据库中真的有
    user\u name
    username
    列吗?)。