TangCheng
2025-04-18 c8aa1cb731cf1e3f573a74335c901e58f487ce26
脚本添加executeSQL
已修改1个文件
86 ■■■■■ 文件已修改
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/jsonflow/node/SMTJsonFlowNodeScript.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/jsonflow/node/SMTJsonFlowNodeScript.java
@@ -310,6 +310,92 @@
            return querySQL(db, sql, nvParams);
        }
        
        public int executeSQL(String sql, NativeObject nvParams) throws Exception
        {
            SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
            return executeSQL(db, sql, nvParams);
        }
        public int executeSQL(String dsId, String sql, NativeObject nvParams) throws Exception
        {
            SMTDatabase db = SMTAIServerApp.getApp().getDataSource(dsId).allocDatabase();
            return executeSQL(db, sql, nvParams);
        }
        private int executeSQL(SMTDatabase db, String sql, NativeObject nvParams) throws Exception
        {
            List<Object> sqlParams = new ArrayList<>();
            List<NativeObject> listRecs = new ArrayList<>();
            try
            {
                // 解析出原始sql
                String rawSQL = SMTStatic.stringFormat(sql, new SMTStatic.StringNamedNotify()
                {
                    @Override
                    public Object getNamedValue(String name, Object[] args) throws Exception
                    {
                        char type;
                        String value = SMTStatic.toString(SMTAIServerApp.getJSValue(nvParams, name));
                        if(value.length() == 1)
                        {
                            type = value.charAt(0);
                            value = "";
                        }
                        else
                        {
                            type = value.charAt(0);
                            value = value.substring(1);
                        }
                        Object ovalue;
                        switch(type)
                        {
                        case 'N':
                            ovalue = null;
                            break;
                        case 'I':
                            ovalue = SMTStatic.toInt(value);
                            break;
                        case 'D':
                            ovalue = SMTStatic.toDouble(value);
                            break;
                        case 'L':
                            ovalue = SMTStatic.toLong(value);
                            break;
                        case 'T':
                            ovalue = SMTStatic.toDate(value);
                            break;
                        default:
                            ovalue = value;
                            break;
                        }
                        sqlParams.add(ovalue);
                        return "?";
                    }
                });
                // 执行查询
                int ret = db.executeSQL(rawSQL, sqlParams.toArray(new Object[sqlParams.size()]));
                return ret;
            }
            finally
            {
                db.close();
            }
        }
        private NativeArray querySQL(SMTDatabase db, String sql, NativeObject nvParams) throws Exception
        {
            List<Object> sqlParams = new ArrayList<>();