JTDS 未连接到正确的数据库
Posted
技术标签:
【中文标题】JTDS 未连接到正确的数据库【英文标题】:JTDS not connecting to correct database 【发布时间】:2014-11-10 15:37:22 【问题描述】:我正在使用 JTDS 连接到 MS SQL Server。连接数据库没问题,但是当我尝试执行语句时,我得到一个 Database 'java' does not exist 异常。
连接字符串:
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost;DatabaseName=MyDatabase;user=testuser;password=testpassword");
尝试执行脚本:
private void runStatement(String scriptLocation)
if(scriptLocation == null)
return;
try
InputStream is = getClass().getClassLoader().getResourceAsStream(scriptLocation);
String query = is.toString();
is.close();
Statement stmt = conn.createStatement();
stmt.executeQuery(query);
catch(IOException | SQLException ex)
log.warning(ex.getMessage());
堆栈跟踪:
WARNING: Database 'java' does not exist. Make sure that the name is entered correctly.
java.sql.SQLException: Database 'java' does not exist. Make sure that the name is entered correctly.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2988)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2421)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:671)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:505)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1427)
at com.exampe.MyJTDSConnection.runStatement(MyJTDSConnection.java:238)
at com.exampe.MyJTDSConnection.loadPageTitle(MyJTDSConnection.java:208)
at com.exampe.MyJTDSConnection.runTesting(MyJTDSConnection.java:69)
at com.exampe.SeleniumTesting.runTest(SeleniumTesting.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
【问题讨论】:
is.toString() 并没有给你你认为的那样。您必须读取输入流来获取您的“脚本”。 【参考方案1】:正如对您问题的评论中所述,将.toString()
方法应用于 InputStream 对象不会读取 InputStream。相反,它只返回对象本身的字符串表示,而不是对象包含的内容。
例如,我的 Java 项目有一个名为“script.sql”的资源文件,其中包含:
SELECT @@VERSION
以下代码比较了在对象上简单地执行.toString()
与使用Apache Commons IO 来实际读取 InputStream 成字符串的结果:
package resourceTest;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
public class ResourceTestMain
public static void main(String[] args)
try (InputStream is = ResourceTestMain.class.getClassLoader().getResourceAsStream("resources/script.sql"))
String toStringValue = is.toString();
String contents = IOUtils.toString(is, "UTF-8");
is.close();
System.out.println("is.toString() returned:");
System.out.println(" " + toStringValue);
System.out.println();
System.out.println("IOUtils.toString(is, \"UTF-8\") returned:");
System.out.println(" " + contents);
catch (Exception e)
e.printStackTrace(System.out);
结果是:
is.toString() returned:
java.io.BufferedInputStream@804a77
IOUtils.toString(is, "UTF-8") returned:
SELECT @@VERSION
【讨论】:
以上是关于JTDS 未连接到正确的数据库的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery 的自动化 Apps 脚本未连接到正确的项目?
Dockerizing springboot应用程序(在容器中)未连接到rabbitmq(在容器中):连接被拒绝