Penukaran Rentetan kepada Kod Java Boleh Kompil
Menyiasat pangkalan data selalunya menyediakan ungkapan tersimpan yang memerlukan penilaian dalam struktur bersyarat. Keupayaan untuk menukar rentetan ini kepada kod kompilasi Java membolehkan pelaksanaan dinamik ungkapan tersuai. Artikel ini meneroka kemungkinan penyelesaian menggunakan API Pengkompil Java, tetapi menyerlahkan potensi risiko yang terlibat dalam menyusun kod arbitrari.
Menggunakan Java Compiler API
Untuk Java 6 dan ke atas, Java Compiler API menawarkan cara untuk menyusun kod Java secara pemrograman. Komponen teras, JavaCompiler, membolehkan anda mentakrifkan kod sumber dalam memori, menawarkan keupayaan untuk mencipta objek Comparator secara dinamik.
String comparatorClassName = ...; // Random name for comparison class String expression = ...; // Retrieved database expression String source = "public class " + comparatorClassName + " implements Comparable<" + comparableClassName + "> {" + " public int compare(" + comparableClassName + " a, " + comparableClassName + " b) {" + " return " + expression + ";" + " }" + "}";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); Writer out = null; // Output writer Iterable<? extends JavaFileObject> compilationUnits = new ArrayList<>(); compilationUnits.add(new SimpleJavaFileObject() { /* Details for loading source String */ }); compiler.getTask(out, null, null, null, null, compilationUnits).call();
Setelah disusun, anda boleh membuat instantiate Comparator dan melaksanakan dinamik ungkapan:
Comparator comparator = (Comparator) Class.forName(comparableClassName).newInstance();
Awas
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyusun Rentetan Diambil Pangkalan Data dengan Selamat ke dalam Kod Java Boleh Laku?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!