jdbc向sqlserver插入数据时报错,SQLServerException: 不支持从 UNKNOWN 到 UNKNOWN 的转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdbc向sqlserver插入数据时报错,SQLServerException: 不支持从 UNKNOWN 到 UNKNOWN 的转换相关的知识,希望对你有一定的参考价值。

我在前端将acc、stock、bs、price、qtybs输入的值传入后端(log打印出前端输入的值),但是持久化到sqlserver时出问题了。数据库里acc、stock、bs、price、qtybs的类型是char,而我传acc和bs时带有字母,如果sql不插入acc和bs时则成功持久化到数据库了。我想问一下,我的sql语句应该怎么写呢?

不知道是哪行的问题
可能是这个结果集是只能迭代一次的 不能用rs.beforeFirst()这个方法
也就是程序说的只进
你可以创建一个滚动的结果集 把之前某行换成
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE)

我也是猜的 可以试一下~
参考技术A 我自己也遇到了这个问题,后来发现是因为xsd中定义的类型与数据库不兼容,比如TimeStamp、Date类型的都不行。要改xsd中类型为string。仅供参考

通过android和JDBC将变量值插入Sql server

【中文标题】通过android和JDBC将变量值插入Sql server【英文标题】:Insert variable value into Sql server through android and JDBC 【发布时间】:2016-02-24 06:14:02 【问题描述】:

我无法从我的 SQLite 数据库向我的 SQL Server 2008 插入值。这是我尝试使用大量示例的代码,但失败了。

dd =MainActivity.this.openOrCreateDatabase("Sellapp", MODE_PRIVATE, null); 
                   Cursor crs = dd.rawQuery("SELECT * FROM customer", null);
                   while(crs.moveToNext())
                          String uname = crs.getString(crs.getColumnIndex("id"));
                            String ucode= crs.getString(crs.getColumnIndex("cust_name"));
                            Log.v("executess", uname);
                            PreparedStatement stmt = connect.prepareStatement("insert into item_device (im_code, im_desc) values (?, ?");
                            stmt.setString(1, uname);
                            stmt.setString(2, ucode);
                            stmt.executeUpdate();
                            Log.v("EExecutess", ucode);

在变量 uname 中,你的代码有我的数据库值。当我试图从这些变量中列出值时,我可以做到这一点而不会出现任何错误。但是当我尝试将整个表插入 SQL 服务器时,我做不到。我尝试了其他问题的示例,但没有人适合我的问题。请任何人帮助。提前谢谢..

【问题讨论】:

你如何连接到sqlserver,你是使用api还是其他方式? @Çağrı 使用 jdbc。我有一个连接类。与 SQL 服务器的连接工作正常,因为 SQLite 数据库中的值只是从服务器中获取的。现在我正试图在同一个数据库中的另一个表上插入。 【参考方案1】:

您将需要一个 Web 服务来处理 SQLServer 访问。您不能直接从移动设备访问 SQLSERVER。

【讨论】:

我正在从我的系统访问它。我可以使用 jdbc 驱动程序访问 SQL 服务器。从 SQL 服务器中选择值正在工作。当我以正常插入方法插入值时,它正在插入。我的问题是我不能在变量中插入值..我不知道通过哪种方法可以做到这一点。【参考方案2】:

我自己发现的。我从没想过它很简单。我在这里发布我的答案。可能会对某人有所帮助..可以使用Batch execution 来完成

dd = MainActivity.this.openOrCreateDatabase("Sellapp", MODE_PRIVATE, null); 
Cursor crs = dd.rawQuery("SELECT * FROM customer", null);

while(crs.moveToNext())
    String uname = crs.getString(crs.getColumnIndex("id"));
    String ucode = crs.getString(crs.getColumnIndex("cust_name"));
    String INSERT_RECORD = "insert into item_device(im_code, im_desc) values(?,?)";

    PreparedStatement pstmt = connect.prepareStatement(INSERT_RECORD);
    pstmt.setString(1, uname);
    pstmt.setString(2, ucode);
    pstmt.addBatch();


    // execute the batch
    int[] updateCounts = pstmt.executeBatch();

【讨论】:

以上是关于jdbc向sqlserver插入数据时报错,SQLServerException: 不支持从 UNKNOWN 到 UNKNOWN 的转换的主要内容,如果未能解决你的问题,请参考以下文章

连接sqlserver数据库时报错,请问怎么解决

sqlserver2019更新时报错无法为该请求检索数据

通过android和JDBC将变量值插入Sql server

JAVA中用啥方法向SQL server2005中插入一条数据并返回他的主键值

用 Navicat插入 mysql 数据 插入中文时报错

Navicat For MySQL中插入数据时报错1055?