Tag: jdbc

获取从中触发SQL查询的包的名称?

我在webapp中使用jdbcdslog和log4j日志引擎。 我能够记录执行的SQL查询。 我想知道如何获取从中触发查询的包的名称。 这样我就可以分离出日志信息,并通过查看日志知道查询的位置,而不是通过代码。 我尝试使用Log4j的PatternLayout中的%C参数来获取此处提到的包名称 但我得到的输出是 2013-07-30-main–INFO -org.jdbcdslog.StatementLogger:java.sql.Statement.executeQuery: SELECT id, first, last, age FROM Employees; 如您所见,记录了SQL查询,但它给出的类是org.jdbcdslog.StatementLogger。 这不是我们想要的,因为我想从查询被激活的类的名称。 我在Log4j.properties文件中使用以下设置 log4j.appender.S.layout.ConversionPattern=%d{yyyy-MM-dd}-%t-%x-%-5p-%C:%m%n 这是因为jdbcdslog包装了与JDBC驱动程序的连接。 我想知道如何获取触发查询的类的名称。

如何动态创建预准备语句 – 并重新使用查询

例如,我一直在尝试创建一个处理来自不同类的查询的类,这些类创建不同的对象。 Class Employees, Class Customers, Class Sales 我想通过从JTextField值派生的构造函数传递SQL查询(到查询类“数据库”)。 例如,来自两个不同的类: new Database (SELECT PRODUCT FROM SALES WHERE DATE = YESTERDAY); new Database (SELECT FULLNAMES FROM CUSTOMER WHERE ADDRESS = NEWYORK); 我面临的问题是动态创建以下项目(PreparedStatement Parameters): stmt.setString(2, NEWYORK); 所以“sql”在“?” 可以填充: String sql = “SELECT FULLNAMES FROM CUSTOMER WHERE ADDRESS = ?”; 在我的项目中,可能有一个语句将值传递给参数,如上所述,或者可能有更多参数,意味着更多语句,因此上述内容无法重用。 任何人都可以有关于如何生成“stmt.setString(2,NEWYORK);”的想法 动态地,以便我可以根据传递的参数数量动态生成它。 所以我可以举例说: stmt.setString(1, NEWYORK); stmt.setString(2, FULLNAMES); stmt.setString(3, […]

准备好的陈述问题

在以下代码中: PreparedStatement statement = conn .prepareStatement(SQLQueries.isMuted); statement.setString(1, player); statement.setString(2, player); //in SQLQueries.java public static final String isMuted = “SELECT EXISTS(SELECT * FROM ” + “(SELECT playerid FROM mute, players AS player ” + “WHERE player.username = ‘?’ AND playerid = player.id” + “UNION ALL ” + “SELECT playerid FROM tempmute, players AS player ” + […]

让MySQL或MS SQL Server通知Java程序表已更新

我有一个MySQL数据库(我将很快转到MS SQL Server 2008/2012),这是从我编写的Java程序访问的。 我们将这个第一个程序称为“显示程序”。 另一个Java程序,我们称之为“更新程序”,将定期向数据库添加数据。 目前,我在一个定时器上有显示程序,该定时器从数据库中检索数据并使用该数据每30秒更新一次显示。 有没有办法让数据库在任何时候添加数据时“通知”显示程序,所以我不必使用计时器? 这两个Java程序将在网络上的不同计算机上运行,​​因此我没有看到如何在显示程序上有一个更新器程序可以触发的侦听器,除非我找到通过网络进行某种操作的方法。 (这听起来很麻烦。)此外,显示程序与数据库保持开放连接,因此数据库可以“看到”该连接并以某种方式ping显示程序在另一端进行自我更新? 如果这是不可能的,或者结果非常困难,请告诉我,我会坚持使用我目前正在使用的30秒轮询方法。

使用JDBC和编译将Microsoft Access数据库连接到Java

对于学校数据库项目,我们正在制作数据库程序(用户GUI和数据库)。 使用Microsoft Access 2010我创建了数据库并使用一些示例数据填充它,并将其保存为.mdb格式并将其放在我的项目文件夹中。 在eclipse中运行它时,以下代码工作正常,连接甚至检索查询。 但是我发现我无法将代码导出到jar并运行它(这是项目所需的,在CD或闪存驱动器上为它们提供程序的工作副本),而且我也无法移植代码到Netbeans让它工作,以及尝试在Linux机器上编译。 我认为这是包含驱动程序或尝试使用Microsoft访问的问题。 运行jar或在Netbeans上运行时得到的错误在代码下方给出。 所以我要么问我如何包含驱动程序以使程序可移植,或者我如何处理这个问题呢? 提前致谢 import java.sql.*; public class JDBCTest { static Connection connection; static Statement statement; public static void main(String args[]){ try { Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance(); String database = “jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb”; connection = DriverManager.getConnection( database ,””,””); buildStatement(); executeQuery(); }catch(Exception e){ e.printStackTrace(); System.out.println(“Error!”); } } public static void buildStatement() throws […]

无法创建数据库jdbc

我正在尝试使用java jdbc创建一个带有方法的数据库,所以我将数据库的名称类型string作为参数传递给数据库,但是我遇到的问题是你的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的”Algebra”附近使用正确的语法 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class DbTest { private Connection connection; public void createDb(String name) throws SQLException { connection = DriverManager.getConnection (“jdbc:mysql://localhost/?user=root&password=root”); String createDbSql = “CREATE DATABASE IF NOT EXISTS ?”; PreparedStatement createDbStat = connection.prepareStatement(createDbSql); createDbStat.setString(1,name); createDbStat.executeUpdate(); } DbTest() { try { createDb(“Algebra”); } catch (SQLException e) { […]

使用ArrayDescriptor在java中创建Oracle ARRAY Type时出现问题

如果我与oracle直接连接,代码工作正常。 但是如果我通过Websphere中配置的数据源连接到数据库,则接收以下exception: – java.sql.SQLException:DSRA9122E:com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@21cf8d56不包装任何类型为oracle.jdbc.driver.OracleConnection的对象。 引发此exception的代码如下: – ArrayDescriptor desc = ArrayDescriptor.createDescriptor(PROC_IN_PARAM_ALIAS, jdbcTemplate.getDataSource().getConnection() .unwrap(OracleConnection.class));

如何在OpenShift上启动与JDBC的连接?

当我在localhost上工作时,为了启动与JDBC的连接,我这样做: String USERNAME = “…”; String PASSWORD = “…”; String DB_NAME = “…”; String FORNAME_URL = “com.mysql.jdbc.Driver”; String URL = “jdbc:mysql://localhost”; Connection m_connection = DriverManager.getConnection(URL , USERNAME , PASSWORD); 但是这对OpenShift不起作用,没有建立连接。 当我在OpenShift上运行它时,我看不到我得到的exception,但我validation了(我检查了OpenShift上的数据库,它没有更新我的查询)连接未建立 知道怎么解决吗?

Java检查数据库中是否存在该值

你好,我正在研究java和MySQL。 我的实施如下: import javax.swing.JFrame; import javax.swing.JLabel; import java.sql.*; import java.util.Scanner; public class BankingSystem extends JFrame { public static void main(String[] args) throws Exception{ int ur=0; int PIN; String ID; Scanner s=new Scanner(System.in); Class.forName(“com.mysql.jdbc.Driver”); String url = “jdbc:mysql://localhost:3306/BankingSystem”; String user = “root”; String pass=””; Connection con = DriverManager.getConnection(url,user,pass); Statement st = con.createStatement(); System.out.println(“Enter Your 4 digit […]

如何检查CachedRowSet中是否存在列名?

我正在查询可能会发生变化的视图中的数据。 在我执行crs.get******()之前,我需要知道列是否存在。我发现我可以查询这样的元数据,以便在我从中请求数据之前查看列是否存在。 ResultSetMetaData meta = crs.getMetaData(); int numCol = meta.getColumnCount(); for (int i = 1; i < numCol+1; i++) if(meta.getColumnName(i).equals("name")) return true; 是否有更简单的方法来检查列是否存在? 编辑:它必须是数据库不可知的。 这就是我引用CachedRowSet而不是数据库的原因。